app/src/styles/components.css

354 lines
5.3 KiB
CSS

/* Generics */
:root {
--text-large: 18px;
--text-navigation: 16px;
--text-medium: 15px;
--text-small: 11px;
--color-title: darkslategray;
--color-default: darkslategray;
--color-emphasis: darkslateblue;
--color-meta: slategray;
--gap-tiny: 4px;
--gap-small: 8px;
--gap-medium: 16px;
--gap-large: 32px;
--duration-short: 0.3s;
--duration-long: 1.5s;
}
.grow {
flex: 1;
}
.scroll {
overflow-y: auto;
}
strong {
font-weight: bold;
}
i {
color: var(--color-emphasis);
font-style: italic;
}
/* Typography */
.text-navigation {
color: black;
font-size: var(--text-navigation);
font-weight: bold;
}
.text-title {
color: var(--color-title);
font-size: var(--text-large);
font-weight: bold;
}
.text-meta {
color: var(--color-meta);
font-family: monospace;
font-size: var(--text-small);
text-transform: uppercase;
}
.text-details {
color: var(--color-default);
font-size: var(--text-medium);
line-height: 1.3rem;
}
.text-error {
color: brown;
font-family: monospace;
font-size: var(--text-small);
text-transform: uppercase;
}
.link {
color: blue;
text-decoration: underline;
}
.link:visited {
color: purple;
}
.link:hover {
color: darkblue;
}
/* Page */
.page {
background-color: lavender;
display: grid;
grid-template-columns: 1fr;
grid-template-rows: 64px calc(100vh - 72px); /* Is there a keyword solution for this? */
grid-gap: var(--gap-small);
height: 100vh;
margin: auto;
max-width: 800px;
}
.page > main {
background-color: lavender;
display: block;
position: relative;
height: 100%;
}
/* Navigation */
.navigation {
display: flex;
flex-direction: row;
box-shadow: 0px 5px 5px -5px darkslategray;
}
.navigation-bottom {
display: flex;
flex-direction: row;
box-shadow: 0px 5px 5px 5px darkslategray;
}
.navigation > .navigation-li {
flex: 1;
}
.navigation-li {
list-style: none;
}
.navigation-item {
display: flex;
flex-shrink: 0;
flex-direction: column;
align-items: center;
justify-content: center;
background-color: lavenderblush;
border: 1px solid darkslategray;
height: 64px;
}
.navigation-item.bottom {
height: 80px;
}
.navigation-item:hover {
background-color: antiquewhite;
}
.navigation-item.active {
background-color: bisque;
}
.navigation-item:disabled {
background-color: slategray;
}
/* Promote / Demote buttons */
.promote-button {
background-color: powderblue;
}
.promote-button:hover {
background-color: darkseagreen;
}
.demote-button {
background-color: thistle;
}
.demote-button:hover {
background-color: rosybrown;
}
/* Notifications */
.notification {
height: 50px;
position: relative;
padding: var(--gap-small);
animation-duration: var(--duration-short);
animation-name: slidein;
transition-duration: var(--duration-short);
transition-timing-function: ease-out;
}
.notification > p {
margin: auto;
}
.notification.error {
background-color: mistyrose;
border: 1px solid peru;
}
.notification.success {
background-color: mediumaquamarine;
border: 1px solid darkolivegreen;
}
@keyframes slidein {
from {
left: -100vw;
}
to {
left: 0%;
}
}
/* Loading */
.loading-icon {
animation: spin infinite linear var(--duration-long),
fadein linear var(--duration-short);
}
@keyframes spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
@keyframes fadein {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
/* Icon buttons */
.icon-button {
display: flex;
align-items: center;
justify-content: middle;
flex-shrink: 0;
padding: var(--gap-tiny);
border: 1px solid rgba(0, 0, 0, 0);
border-radius: 8px;
}
.icon-button:hover {
background-color: lavenderblush;
border: 1px solid slategray;
}
/* Content organization */
.content-card {
background-color: lavender;
border: 1px solid darkslategray;
box-shadow: 0px 5px 5px -5px darkslategray;
padding: var(--gap-medium);
}
.content-row {
display: flex;
flex-direction: row;
align-items: center;
}
.item-list {
padding-left: 16px;
list-style: disc;
margin: var(--gap-small) 0;
}
.content-list {
display: flex;
flex-direction: column;
height: 100%;
}
.content-list > * + * {
margin-top: var(--gap-medium);
}
.content-text {
display: flex;
flex-direction: column;
height: 100%;
}
.content-query {
display: flex;
flex-direction: column;
margin: auto;
padding: 0 var(--gap-medium);
}
.content-query > select {
padding: var(--gap-small);
}
.content-query > input {
padding: var(--gap-small);
}
.content-query > label {
margin-top: var(--gap-medium);
margin-bottom: var(--gap-small);
}
.content-query :first {
margin-top: 100px;
}
/* Margins and paddings */
.padding-small {
padding: var(--gap-small) var(--gap-medium);
}
.margin-small {
margin: var(--gap-small) 0px;
}
.margin-title {
margin: var(--gap-large) 0px var(--gap-small);
}
.margin-paragraph {
margin: var(--gap-medium) 0px var(--gap-small);
}
/* Expression set page */
.page-loading {
height: 100%;
width: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.page-with-padding {
padding: var(--gap-small) var(--gap-medium) var(--gap-medium);
}
.page-with-bottom-navigation {
display: grid;
grid-template-columns: 1fr;
grid-template-rows: calc(100% - 88px) 80px;
grid-gap: var(--gap-small);
height: 100%;
}