gmx.css
Version:
A micro Material Design 3 based CSS-only framework.
2,371 lines (1,976 loc) • 44.7 kB
CSS
:root,body.light {
--primary: #6750a4;
--on-primary: #ffffff;
--primary-container: #e9ddff;
--on-primary-container: #22005d;
--secondary: #625b71;
--on-secondary: #ffffff;
--secondary-container: #e8def8;
--on-secondary-container: #1e192b;
--tertiary: #7e5260;
--on-tertiary: #ffffff;
--tertiary-container: #ffd9e3;
--on-tertiary-container: #31101d;
--error: #ba1a1a;
--on-error: #ffffff;
--error-container: #ffdad6;
--on-error-container: #410002;
--background: #fffbff;
--on-background: #1c1b1e;
--surface: #fdf8fd;
--on-surface: #1c1b1e;
--surface-variant: #e7e0eb;
--on-surface-variant: #49454e;
--outline: #7a757f;
--outline-variant: #cac4cf;
--shadow: #000000;
--scrim: #000000;
--inverse-surface: #313033;
--inverse-on-surface: #f4eff4;
--inverse-primary: #cfbcff;
--surface-dim: #ddd8dd;
--surface-bright: #fdf8fd;
--surface-container-lowest: #ffffff;
--surface-container-low: #f7f2f7;
--surface-container: #f2ecf1;
--surface-container-high: #ece7eb;
--surface-container-highest: #e6e1e6
}
body.dark {
--primary: #cfbcff;
--on-primary: #381e72;
--primary-container: #4f378a;
--on-primary-container: #e9ddff;
--secondary: #cbc2db;
--on-secondary: #332d41;
--secondary-container: #4a4458;
--on-secondary-container: #e8def8;
--tertiary: #efb8c8;
--on-tertiary: #4a2532;
--tertiary-container: #633b48;
--on-tertiary-container: #ffd9e3;
--error: #ffb4ab;
--on-error: #690005;
--error-container: #93000a;
--on-error-container: #ffb4ab;
--background: #1c1b1e;
--on-background: #e6e1e6;
--surface: #141316;
--on-surface: #e6e1e6;
--surface-variant: #49454e;
--on-surface-variant: #cac4cf;
--outline: #948f99;
--outline-variant: #49454e;
--shadow: #000000;
--scrim: #000000;
--inverse-surface: #e6e1e6;
--inverse-on-surface: #313033;
--inverse-primary: #6750a4;
--surface-dim: #141316;
--surface-bright: #3a383c;
--surface-container-lowest: #0f0e11;
--surface-container-low: #1c1b1e;
--surface-container: #201f22;
--surface-container-high: #2b292d;
--surface-container-highest: #363438;
color-scheme: dark;
}
:root {
--elevation-0: none;
--elevation-1: 0px 1px 2px 0px rgb(from var(--shadow) r g b / .3), 0px 1px 3px 1px rgb(from var(--shadow) r g b / .15);
--elevation-2: 0px 1px 2px 0px rgb(from var(--shadow) r g b / .3), 0px 2px 6px 2px rgb(from var(--shadow) r g b / .15);
--elevation-3: 0px 1px 3px 0px rgb(from var(--shadow) r g b / .3), 0px 4px 8px 3px rgb(from var(--shadow) r g b / .15);
--elevation-4: 0px 2px 3px 0px rgb(from var(--shadow) r g b / .3), 0px 6px 10px 4px rgb(from var(--shadow) r g b / .15);
--elevation-5: 0px 4px 4px 0px rgb(from var(--shadow) r g b / .3), 0px 8px 12px 6px rgb(from var(--shadow) r g b / .15);
--bottom-offset: 0;
--density: 0;
--density-term: calc(var(--density) * .25rem);
--rounding-none: 0;
--rounding-extra-small: 0.25rem;
--rounding-small: 0.5rem;
--rounding-medium: 0.75rem;
--rounding-large: 1.25rem;
--rounding-extra-large: 1.75rem;
--rounding-full: calc(infinity * 1px);
--font: roboto, "Roboto Variable", system-ui, sans-serif;
--easing-fast-spatial: cubic-bezier(0.42, 1.67, 0.21, 0.9) 0.35s;
--easing-spatial: cubic-bezier(0.38, 1.21, 0.22, 1) 0.5s;
--easing-slow-spatial: cubic-bezier(0.39, 1.29, 0.35, 0.98) 0.65s;
--easing-fast: cubic-bezier(0.31, 0.94, 0.34, 1) 0.15s;
--easing: cubic-bezier(0.34, 0.8, 0.34, 1) 0.2s;
--easing-slow: cubic-bezier(0.34, 0.88, 0.34, 1) 0.3s;
--curve: linear(0, 0.034 6%, 0.073 9%, 0.126 11%, 0.194 13%, 0.273 15%, 0.351 16%, 0.541 18%, 0.652 20%, 0.755 24%, 0.839 30%, 0.91 39%, 0.959 53%, 0.989 72%, 1);
--curve-decel: cubic-bezier(0.05, 0.7, 0.1, 1);
--curve-accel: cubic-bezier(0.3, 0, 0.8, 0.15);
}
:root {
--snackbar-shape: var(--rounding-extra-small);
--segmented-button-shape: var(--rounding-full);
--button-shape: 1.25rem;
--group-icon-button-shape: 3rem;
--chip-shape: var(--rounding-small);
--textfield-outlined-shape: var(--rounding-extra-small);
--textfield-filled-shape: var(--rounding-extra-small);
--datefield-shape: var(--rounding-extra-small);
--date-picker-shape: var(--rounding-large);
--slider-track-out-shape: 0.5rem;
--slider-track-in-shape: 0.125rem;
--slider-thumb-shape: var(--rounding-full);
--menu-shape: var(--rounding-extra-small);
--linear-progress-shape: var(--rounding-full);
--bottom-sheet-shape: var(--rounding-extra-large);
--card-shape: var(--rounding-medium);
--fab-small-shape: var(--rounding-small);
--fab-normal-shape: var(--rounding-large);
--fab-large-shape: var(--rounding-extra-large);
--dialog-shape: var(--rounding-extra-large);
--checkbox-shape: 0.175rem;
--radio-shape: var(--rounding-full);
--switch-track-shape: var(--rounding-full);
--switch-handle-shape: var(--rounding-full);
}
@font-face {
font-family: 'Roboto Variable';
font-style: normal;
font-display: swap;
font-weight: 100 900;
src: url(https://cdn.jsdelivr.net/fontsource/fonts/roboto:vf@latest/latin-wght-normal.woff2) format('woff2-variations');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
* {
box-sizing: border-box;
-webkit-box-sizing: border-box;
-webkit-tap-highlight-color: transparent;
max-width: 100%;
}
html,
body {
margin: 0;
}
body {
font-family: var(--font);
font-size: 1rem;
letter-spacing: 0.03125rem;
line-height: 1.5rem;
background: var(--background);
color: var(--on-background);
min-height: 100vh;
}
main {
display: flex;
min-height: 100vh;
}
:is(a, button, .btn, .chip):focus-visible {
outline: 0.125rem solid var(--primary);
outline-offset: 0.25rem;
}
[disabled] {
color: rgb(from var(--on-surface) r g b / 38%);
pointer-events: none;
}
img[width][height] {
height: auto;
}
img.btn {
-o-object-fit: cover;
object-fit: cover;
-o-object-position: center;
object-position: center;
border: none;
}
summary {
cursor: pointer;
}
a {
text-decoration: none;
}
iconify-icon:not(aside iconify-icon, iconify-icon[width][height]) {
display: inline-block;
line-height: 0;
width: 1em;
height: 1em;
max-width: none;
}
.chip input,
.tabs input,
.group input {
padding: 0;
height: initial;
width: initial;
margin-bottom: 0;
display: none;
cursor: pointer;
}
.radio,
.checkbox,
.switch {
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
@keyframes opacity {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
:where(button, .btn) {
display: inline-flex;
align-items: center;
justify-content: center;
background: var(--primary);
border: 1px solid transparent;
border-radius: var(--button-shape);
color: var(--on-primary);
font-family: inherit;
font-size: 0.875rem;
font-weight: 500;
line-height: normal;
letter-spacing: normal;
height: calc(2.5rem + var(--density-term));
padding: 0 1rem;
cursor: pointer;
text-align: center;
text-decoration: none;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
outline: 1px solid transparent;
transition: border-radius var(--easing-fast-spatial), box-shadow var(--easing-fast), background-color var(--easing-fast), color var(--easing-fast), margin var(--easing-fast), padding var(--easing-fast-spatial);
}
:where(button, .btn):hover {
background: rgb(from var(--primary) r g b / 90%);
box-shadow: var(--elevation-1);
}
:where(button, .btn) iconify-icon {
font-size: 1.125rem;
margin: 0 0.5rem 0 0;
}
:where(button, .btn).tonal,
:is(.group, .split).tonal :where(button, .btn) {
background: var(--secondary-container);
color: var(--on-secondary-container);
}
:where(button, .btn).tonal:hover,
.chip:has(input:checked):hover,
:is(.group, .split).tonal :where(button, .btn):hover {
background: rgb(from var(--primary) r g b / 20%);
}
.group.tonal :where(button, .btn):has(input:checked) {
background: var(--secondary);
}
:where(button, .btn).text,
:where(button, .btn).outline,
:is(.split).outline :where(button, .btn) {
box-shadow: none;
background: transparent;
color: var(--primary);
}
:where(button, .btn).text:hover,
:where(button, .btn).outline:hover,
:is(.split).outline :where(button, .btn):hover,
.tabs>label:has(input:checked):hover {
box-shadow: none;
background: rgb(from var(--primary) r g b / 10%);
}
:where(button, .btn).outline,
:is(.split).outline :where(button, .btn) {
border: 0.0625rem solid var(--outline);
}
:where(button, .btn).text {
padding: 0.8rem 0.8rem;
}
:where(button, .btn).elevated,
:is(.split).elevated :where(button, .btn) {
background: var(--surface-container-low);
color: var(--primary);
box-shadow: var(--elevation-1) ;
}
:where(button, .btn).elevated:hover,
:is(.split).elevated :where(button, .btn):hover {
background: rgb(from var(--primary) r g b / 15%);
box-shadow: var(--elevation-2) ;
}
main>aside li:not(.active):hover iconify-icon,
.menu>*:hover,
.chip:hover,
.tabs>*:hover {
background: var(--surface-container-highest);
}
:where(button, .btn):is(.icon, .fab:not(.extended)) {
aspect-ratio: 1/1;
width: var(--size);
height: var(--size);
}
:where(button, .btn):is(.icon, .fab.small) {
--size: 2.5rem;
}
:where(button, .btn).chip.icon {
--size: 2rem;
}
:is(button, .btn, .fab):not(.flat):active {
border-radius: var(--rounding-small);
}
:where(button, .btn):is(.icon, .fab) iconify-icon,
.group.icons iconify-icon {
font-size: 1.5rem;
margin-right: 0;
}
:where(button, .btn).fab.small {
border-radius: var(--fab-small-shape);
}
:where(button, .btn).fab {
--size: 3.5rem;
box-shadow: var(--elevation-2);
border-radius: var(--fab-normal-shape);
}
:where(button, .btn).fab.large {
--size: 5.5rem;
border-radius: var(--fab-large-shape);
}
:where(button, .btn).fab.large iconify-icon {
font-size: 2.5rem;
}
:where(button, .btn).fab.extended {
width: auto;
}
:where(button, .btn).fab.extended iconify-icon {
margin-right: 0.5rem;
}
:is(.group, .split) {
display: flex;
gap: 0.125rem;
}
.group:not(.variable) :where(button, .btn) {
width: 100%;
}
.group.variable {
display: flex;
align-items: center;
justify-content: center;
}
.group :where(button, .btn) {
background: var(--surface-container);
color: var(--on-surface-variant);
border-radius: var(--rounding-medium);
}
.group :where(button, .btn):hover {
box-shadow: none;
background: var(--surface-container-highest);
}
.split> :where(button, .btn):active {
border-radius: var(--button-shape) ;
}
.group :where(button, .btn):has(input:checked) {
border-radius: var(--button-shape);
background: var(--primary);
color: var(--on-primary);
}
.split> :where(button, .btn):first-child,
.group:not(.icons) :where(button, .btn):first-child:active {
border-radius: var(--button-shape) var(--rounding-small) var(--rounding-small) var(--button-shape);
}
.split> :where(button, .btn):last-child,
.group:not(.icons) :where(button, .btn):last-child:active {
border-radius: var(--rounding-small) var(--button-shape) var(--button-shape) var(--rounding-small);
}
.group> :where(button, .btn):first-child,
.split> :where(button, .btn):first-child:hover {
border-radius: var(--button-shape) var(--rounding-medium) var(--rounding-medium) var(--button-shape);
}
.group> :where(button, .btn):last-child,
.split> :where(button, .btn):last-child:hover {
border-radius: var(--rounding-medium) var(--button-shape) var(--button-shape) var(--rounding-medium);
}
.group.icons {
gap: .5rem;
}
.group.icons :where(button, .btn) {
--size: 4.25rem;
height: var(--size);
border-radius: var(--group-icon-button-shape);
}
.group.icons.large :where(button, .btn) {
--size: 5rem;
}
.group.icons.extra :where(button, .btn) {
--size: 6rem;
}
.group.icons :where(button, .btn):has(input:checked) {
border-radius: var(--rounding-large);
}
.group.icons :where(button, .btn):active,
.physics :where(button, .btn):active {
padding: 0 2rem;
}
.group.icons :where(button, .btn) iconify-icon {
font-size: 2rem;
}
.group .extended {
font-size: 1.25rem;
font-weight: 400;
}
.group .extended iconify-icon {
margin-right: 1rem;
}
.card {
padding: 1rem;
background: var(--surface-container-low);
color: var(--on-surface);
box-shadow: var(--elevation-1);
border-radius: var(--card-shape);
}
.container:not(:has(>header, >footer)),
.container>header,
.container:not(.min)>footer {
padding: 1rem;
border-radius: var(--rounding-extra-large);
background: var(--surface-container-low);
color: var(--on-surface);
}
.container.min>footer {
padding: 1rem 0;
}
.container:has(>header, >footer) {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.container>header {
flex-grow: 1;
}
.container:not(.min)>header {
border-radius: var(--rounding-extra-large) var(--rounding-extra-large) var(--rounding-small) var(--rounding-small);
}
.container:not(.min)>footer {
border-radius: var(--rounding-small) var(--rounding-small) var(--rounding-extra-large) var(--rounding-extra-large);
}
.chip {
height: 2rem;
display: inline-flex;
padding: 0.35rem 1rem;
border-radius: var(--chip-shape);
background: var(--surface);
color: var(--on-surface-variant);
border: solid 0.0625rem var(--outline);
}
.chip:not(.icon) iconify-icon {
margin-left: -0.25rem;
}
.chip:not(.icon) iconify-icon:last-child {
margin-left: 0.65rem;
margin-right: -0.75rem;
}
.chip:has(input:not(:checked)):hover {
box-shadow: none;
}
.chip:has(input:checked) {
border-color: transparent;
background: var(--secondary-container);
color: var(--on-secondary-container);
}
.dialog-trigger {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
position: absolute;
}
input.dialog-trigger:not(:checked)+.dialog {
display: none;
}
input.dialog-trigger:checked+.dialog {
display: block;
}
:is(dialog, .dialog) {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
margin: 0;
z-index: 200;
background: var(--surface-container-high);
color: var(--on-surface-variant);
border: none;
outline: none;
border-radius: var(--dialog-shape);
min-width: 35rem;
padding: 1.5rem 1.5rem;
}
:is(dialog, .dialog).s {
max-width: 35rem;
}
:is(dialog, .dialog).l {
min-width: 50rem;
}
:is(dialog, .dialog) :where(iconify-icon, h1, h2, h3, h4, h5, h6) {
display: block;
text-align: center;
}
dialog:not(.bottom-sheet)[open],
input.dialog-trigger:checked+.dialog:not(.bottom-sheet) {
animation: dialog-in var(--curve-decel) 0.5s, opacity var(--curve-decel) 0.1s both;
}
:is(dialog, .dialog).bottom-sheet {
top: 100%;
transform: translate(-50%, -100%);
background: var(--surface-container-low);
color: var(--on-surface);
border-radius: var(--bottom-sheet-shape) var(--bottom-sheet-shape) 0 0;
padding: 2rem 1rem 1rem;
border: none;
}
dialog[open].bottom-sheet,
input.dialog-trigger:checked+.dialog.bottom-sheet {
animation: dialog-bottom var(--curve-decel) 0.5s;
}
input.dialog-trigger:checked::after {
content: '';
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 100;
}
dialog::backdrop,
input.dialog-trigger:checked::after {
--backdrop-opacity: 30%;
background: rgb(from var(--scrim) r g b / var(--backdrop-opacity));
animation: dialog-backdrop 0.4s;
}
dialog.bottom-sheet::backdrop,
input.dialog-trigger:has(+ .dialog.bottom-sheet):checked::after {
--backdrop-opacity: 50%;
}
:is(dialog, .dialog) form {
text-align: right;
padding-top: 0.5rem;
}
:is(dialog, .dialog).bottom-sheet form {
padding-top: 1.5rem;
}
@keyframes dialog-bottom {
0% {
transform: translate(-50%, 50%);
}
100% {
transform: translate(-50%, -100%);
}
}
@keyframes dialog-backdrop {
0% {
background-color: transparent;
}
100% {
background: rgb(from var(--scrim) r g b / var(--backdrop-opacity));
}
}
@keyframes dialog-in {
0% {
transform: translate(-50%, -70%);
clip-path: inset(0 0 100% 0 round var(--rounding-extra-large));
}
100% {
transform: translate(-50%, -50%);
clip-path: inset(0 0 0 0 round var(--rounding-extra-large));
}
}
.field {
position: relative;
}
.field:not(:last-child, :is(nav, .row) .field, .grid>.field) {
margin-bottom: 1rem;
}
.field :is(input, textarea) {
display: block ;
background: none;
border: none;
outline: none;
width: 100%;
color: var(--on-surface);
box-sizing: border-box;
font: inherit;
padding: 1rem;
resize: vertical;
}
.field:not(.outline) :is(input, textarea) {
border-bottom: 1px solid var(--outline);
background: var(--surface-container-highest);
border-radius: var(--textfield-filled-shape) var(--textfield-filled-shape) 0 0;
padding: 1.5rem 1rem 0.5rem;
}
.field:not(.outline) :is(input, textarea):hover {
background: rgb(from var(--on-surface) r g b / 15%);
}
.field.outline :is(input, textarea) {
border: 1px solid var(--outline);
border-radius: var(--textfield-outlined-shape);
}
.field:not(.outline) :is(input, textarea):focus {
outline: none;
border-bottom: 2px solid var(--primary);
margin-bottom: -1px;
}
.field.outline :is(input, textarea):focus {
border: 2px solid var(--primary);
margin: -1px;
}
.field :is(input, textarea)::-moz-placeholder {
color: transparent;
-moz-user-select: none;
user-select: none;
}
.field :is(input, textarea)::placeholder {
color: transparent;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
.field label {
position: absolute;
top: 1rem;
bottom: 0;
left: 1rem;
display: flex;
align-items: self-start;
pointer-events: none;
}
.field label span {
transition: all 0.4s var(--curve-decel);
}
.field.outline label {
margin-left: -.35rem;
}
.field.outline label span {
padding: 0 .35rem;
background: var(--background);
}
.field:not(.outline) :is(input, textarea):is(:focus, :not(:-moz-placeholder)) + label span {
font-size: 0.75rem;
transform: translate(0, -50%);
}
.field:not(.outline) :is(input, textarea):is(:focus, :not(:placeholder-shown)) + label span {
font-size: 0.75rem;
transform: translate(0, -50%);
}
.field.outline :is(input, textarea):is(:focus, :not(:-moz-placeholder)) + label span {
font-size: 0.75rem;
transform: translate(0, -115%);
}
.field.outline :is(input, textarea):is(:focus, :not(:placeholder-shown)) + label span {
font-size: 0.75rem;
transform: translate(0, -115%);
}
.field :is(input, textarea):focus + label span {
color: var(--primary);
}
.field:has(iconify-icon) :is(input, textarea) {
padding-left: 2.85rem ;
}
.field:has(iconify-icon) label {
left: 2.85rem;
}
.field.outline:has(iconify-icon) :is(input, textarea):is(:focus, :not(:-moz-placeholder)) + label {
left: 1rem;
}
.field.outline:has(iconify-icon) :is(input, textarea):is(:focus, :not(:placeholder-shown)) + label {
left: 1rem;
}
.field iconify-icon {
position: absolute;
pointer-events: none;
left: 0.65rem;
font-size: 1.5rem;
}
:is(.checkbox, .radio) {
display: inline-block;
position: relative;
cursor: pointer;
z-index: 0;
}
:is(.checkbox, .radio):not(:last-child) {
margin-right: 0.75rem;
}
:is(.checkbox, .radio)>input {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
z-index: -1;
position: absolute;
left: -10px;
top: -8px;
display: block;
margin: 0;
border-radius: 50%;
width: 40px;
height: 40px;
background-color: currentColor;
box-shadow: none;
outline: none;
opacity: 0;
transform: scale(1);
pointer-events: none;
transition: all var(--curve-decel) 0.35s;
}
:is(.checkbox, .radio):hover>input {
opacity: 0.08;
}
:is(.checkbox, .radio)>span::before {
content: "";
display: inline-block;
box-sizing: border-box;
border: solid 2px;
border-color: currentColor;
border-radius: var(--checkbox-shape);
transition: all 0.2s;
}
.checkbox>span::before {
margin: 3px 11px 3px 1px;
width: 18px;
height: 18px;
}
.checkbox>input:checked+span::before {
border-color: var(--primary);
background-color: var(--primary);
}
.radio>span::before {
margin: 2px 10px 2px 0;
border-radius: 50%;
width: 20px;
height: 20px;
}
:is(.checkbox, .radio)>span::after {
content: "";
display: block;
position: absolute;
}
.checkbox>span::after {
top: 4px;
left: 1px;
width: 10px;
height: 5px;
border: solid 1px transparent;
border-right: none;
border-top: none;
transform: translate(3px, 4px) rotate(-45deg);
}
.radio>span::after {
top: 2px;
left: 0;
border-radius: 50%;
width: 10px;
height: 10px;
background-color: var(--primary);
transform: translate(5px, 5px) scale(0);
transition: transform var(--easing-fast-spatial);
}
.radio>input:checked+span::after {
transform: translate(5px, 5px) scale(1);
}
:is(.checkbox, .radio)>input:checked {
background-color: var(--primary);
}
:is(.checkbox, .radio)>input:checked+span::after {
border-color: var(--on-primary);
}
:is(.checkbox, .radio)>input:active+span::before,
.radio>input:checked+span::before {
border-color: var(--primary);
}
.grid {
display: grid;
grid-template-columns: repeat(12, 1fr);
gap: 1rem;
}
.grid>* {
margin: 0;
grid-column: span var(--num);
}
.grid>.s1,
.grid.all-s1>* {
--num: 1;
}
.grid>.s2,
.grid.all-s2>* {
--num: 2;
}
.grid>.s3,
.grid.all-s3>* {
--num: 3;
}
.grid>.s4,
.grid.all-s4>* {
--num: 4;
}
.grid>.s5,
.grid.all-s5>* {
--num: 5;
}
.grid>.s6,
.grid.all-s6>* {
--num: 6;
}
.grid>.s7,
.grid.all-s7>* {
--num: 7;
}
.grid>.s8,
.grid.all-s8>* {
--num: 8;
}
.grid>.s9,
.grid.all-s9>* {
--num: 9;
}
.grid>.s10,
.grid.all-s10>* {
--num: 10;
}
.grid>.s11,
.grid.all-s11>* {
--num: 11;
}
.grid>.s12,
.grid.all-s12>* {
--num: 12;
}
@media screen and (min-width: 48em) {
.grid>.m1,
.grid.all-m1>* {
--num: 1;
}
.grid>.m2,
.grid.all-m2>* {
--num: 2;
}
.grid>.m3,
.grid.all-m3>* {
--num: 3;
}
.grid>.m4,
.grid.all-m4>* {
--num: 4;
}
.grid>.m5,
.grid.all-m5>* {
--num: 5;
}
.grid>.m6,
.grid.all-m6>* {
--num: 6;
}
.grid>.m7,
.grid.all-m7>* {
--num: 7;
}
.grid>.m8,
.grid.all-m8>* {
--num: 8;
}
.grid>.m9,
.grid.all-m9>* {
--num: 9;
}
.grid>.m10,
.grid.all-m10>* {
--num: 10;
}
.grid>.m11,
.grid.all-m11>* {
--num: 11;
}
.grid>.m12,
.grid.all-m12>* {
--num: 12;
}
}
@media screen and (min-width: 64em) {
.grid>.l1,
.grid.all-l1>* {
--num: 1;
}
.grid>.l2,
.grid.all-l2>* {
--num: 2;
}
.grid>.l3,
.grid.all-l3>* {
--num: 3;
}
.grid>.l4,
.grid.all-l4>* {
--num: 4;
}
.grid>.l5,
.grid.all-l5>* {
--num: 5;
}
.grid>.l6,
.grid.all-l6>* {
--num: 6;
}
.grid>.l7,
.grid.all-l7>* {
--num: 7;
}
.grid>.l8,
.grid.all-l8>* {
--num: 8;
}
.grid>.l9,
.grid.all-l9>* {
--num: 9;
}
.grid>.l10,
.grid.all-l10>* {
--num: 10;
}
.grid>.l11,
.grid.all-l11>* {
--num: 11;
}
.grid>.l12,
.grid.all-l12>* {
--num: 12;
}
}
.grid-outline {
border-bottom: 1px solid var(--outline-variant);
border-left: 1px solid var(--outline-variant);
gap: 0;
}
.grid-outline>* {
border-top: 1px solid var(--outline-variant);
border-right: 1px solid var(--outline-variant);
}
details .menu {
position: absolute;
z-index: 2;
}
.list-box,
.menu {
list-style-type: none;
padding: 0;
margin: 0;
}
.list-box>* {
padding: 1.15rem 1rem 0.75rem;
}
.list-box>*>article * {
margin: 0;
}
.list-box>* iconify-icon,
.menu>* iconify-icon {
font-size: 1.5rem;
margin-right: 1rem;
}
.list-box>*+* {
border-top: 1px solid var(--outline-variant);
}
.menu {
background: var(--surface-container);
box-shadow: var(--elevation-2);
font-size: 0.875rem;
font-weight: 500;
border-radius: var(--menu-shape);
padding: 0.5rem 0;
min-width: 7rem;
max-width: 17.5rem;
}
.menu>* {
padding: 0.75rem;
cursor: pointer;
transition: 0.1s;
}
main>aside {
position: fixed;
top: 0;
left: 0;
height: 100vh;
padding: 0 1.25rem;
}
main>aside> :is(menu, .row) {
display: flex;
height: 100%;
justify-content: center;
flex-direction: column;
padding: 0;
margin: 0;
}
main>article {
width: 93%;
margin: 0 0 0 auto;
padding: 0 1.5rem;
}
@media screen and (max-width: 64em) {
main>aside {
background: var(--surface);
top: auto;
bottom: 0;
padding: 0.25rem 0;
width: 100%;
z-index: 50;
height: -moz-min-content;
height: min-content;
}
main>aside> :is(menu, .row) {
justify-content: space-around;
flex-direction: row;
}
main {
padding: 0 1rem;
margin: 0 auto 2rem;
}
main>article {
width: 100%;
padding: 0 0 ;
margin-bottom: 2.25rem;
}
:is(dialog, .dialog) {
min-width: 100% ;
width: 100%;
}
}
:is(nav, .row):not(.segmented),
.list-box>*,
.menu>*,
label.checkbox *,
label.radio *,
.field:has(iconify-icon) {
display: flex;
align-items: center;
align-self: normal;
text-align: start;
}
:is(nav, .row) *:not(main>aside *, :is(h1, h2, h3, h4, h5, h6)) {
margin-bottom: 0;
margin-top: 0;
}
main>aside li,
main>aside li:has(*>iconify-icon)>* {
width: 3.5rem;
margin: 0.2rem 0;
cursor: pointer;
display: flex;
text-align: center;
list-style-type: none;
align-self: center;
flex-direction: column;
justify-content: center;
color: inherit;
}
main>aside li span {
font-size: 0.75rem;
font-weight: 500;
}
main>aside li iconify-icon {
width: 100%;
display: flex;
align-self: center;
flex-direction: column;
justify-content: center;
padding: 0.25rem;
border-radius: var(--rounding-full);
transition: 0.1s;
}
main>aside li.active iconify-icon {
background: var(--secondary-container);
color: var(--on-secondary-container);
}
main>aside li iconify-icon {
font-size: 1.5rem;
}
main>article>section {
margin: 3.5rem 0;
}
main>aside * {
align-self: center;
}
progress:not(.circle, [value])::after {
content: "";
position: absolute;
top: 0;
right: 0;
bottom: 0;
width: 50%;
background: var(--primary);
animation: 1.2s to-linear linear infinite;
}
@keyframes to-linear {
0% {
left: -100%;
}
100% {
left: 100%;
}
}
progress {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
progress:not(.circle) {
position: relative;
height: 0.25rem;
border-radius: var(--linear-progress-shape);
overflow: hidden;
}
::-webkit-progress-value {
background: var(--primary);
}
::-webkit-progress-bar {
background: var(--primary-container);
}
progress.circle::-webkit-progress-value {
background: transparent;
}
progress.circle::-webkit-progress-bar {
background: transparent;
}
progress.circle {
display: inline-flex;
align-items: center;
position: relative;
width: 3rem;
height: 3rem;
background: conic-gradient(var(--primary) calc(var(--value) * 1%), var(--primary-container) 0);
border-radius: 50%;
}
progress.circle::after {
content: "";
position: absolute;
inset: 10%;
background: var(--background);
border-radius: 50%;
}
progress.circle.spin {
animation: spin 1s infinite linear;
}
@keyframes spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
.slider {
display: block;
position: relative;
height: 2.75rem;
min-width: 10rem;
}
.slider input {
position: absolute;
width: calc(100%);
height: 100%;
opacity: 0;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
margin: 0;
cursor: pointer;
}
.slider .track::before {
position: absolute;
content: " ";
left: 0;
top: 50%;
translate: 0 -50%;
width: calc(var(--percent) - 0.375rem);
height: 1rem;
pointer-events: none;
background: var(--primary);
border-start-start-radius: var(--slider-track-out-shape);
border-end-start-radius: var(--slider-track-out-shape);
border-start-end-radius: var(--slider-track-in-shape);
border-end-end-radius: var(--slider-track-in-shape);
transition: var(--easing);
}
.slider .track::after {
position: absolute;
content: " ";
right: 0;
top: 50%;
translate: 0 -50%;
width: calc(100% - var(--percent) - 0.375rem);
height: 1rem;
pointer-events: none;
background: var(--primary-container);
border-start-start-radius: var(--slider-track-in-shape);
border-end-start-radius: var(--slider-track-in-shape);
border-start-end-radius: var(--slider-track-out-shape);
border-end-end-radius: var(--slider-track-out-shape);
transition: var(--easing);
}
.slider .thumb {
position: absolute;
left: var(--percent);
translate: -50% 0;
width: 0.25rem;
height: 2.75rem;
border-radius: 1.25rem;
background: var(--primary);
pointer-events: none;
transition: var(--easing);
}
.slider input:active~.thumb {
width: 0.125rem;
}
.slider .thumb::before {
content: attr(data-percent);
position: absolute;
background: var(--inverse-surface);
color: var(--inverse-on-surface);
width: 2.3rem;
text-align: center;
padding: 0.4rem 0;
font-size: 0.875rem;
border-radius: var(--slider-thumb-shape);
left: -1.15rem;
top: -2.65rem;
opacity: 0;
pointer-events: none;
transition: var(--easing);
}
.slider:hover .thumb::before {
opacity: 1;
}
.snackbar {
visibility: hidden;
top: 87.5%;
padding: 0.25rem 1rem;
min-width: 20rem;
max-width: 60rem;
border-radius: var(--snackbar-shape);
box-shadow: var(--elevation-3);
background-color: var(--inverse-surface);
border: none;
color: var(--inverse-on-surface);
font-size: 0.875rem;
line-height: 1.25rem;
font-weight: 300;
opacity: 0;
}
.snackbar:popover-open {
animation: snackbar-open var(--curve-decel) 0.5s, opacity var(--curve-decel) 0.1s;
visibility: visible;
opacity: 1;
}
.snackbar :where(.btn, button).icon {
margin-right: -1rem;
border-radius: 0;
color: var(--inverse-on-surface);
}
@media screen and (max-width: 64em) {
.snackbar {
top: 77.5%;
}
}
@keyframes snackbar-open {
0% {
clip-path: polygon(-100% 150%, -100% calc(100% + 0.25rem), 0% calc(100% + 0.25rem), 0.033rem calc(100% + 0.125rem), 0.125rem calc(100% + 0.033rem), 0.25rem 100%, calc(100% - 0.25rem) 100%, calc(100% - 0.125rem) calc(100% + 0.033rem), calc(100% - 0.033rem) calc(100% + 0.125rem), 100% calc(100% + 0.25rem), 200% calc(100% + 0.25rem), 200% 150%);
}
to {
clip-path: polygon(-100% 150%, -100% 0.25rem, 0% 0.25rem, 0.033rem 0.125rem, 0.125rem 0.033rem, 0.25rem 0%, calc(100% - 0.25rem) 0%, calc(100% - 0.125rem) 0.033rem, calc(100% - 0.033rem) 0.125rem, 100% 0.25rem, 200% 0.25rem, 200% 150%);
}
}
.switch {
position: relative;
display: inline-flex;
width: 3.25rem;
height: 2rem;
}
.switch>span {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: var(--surface-container-highest);
border: solid 0.125rem var(--outline);
transition: 0.2s;
border-radius: 2rem;
}
.switch>input+span::before {
content: "";
position: absolute;
width: 1rem;
height: 1rem;
border-radius: var(--switch-handle-shape);
background-color: var(--outline);
color: var(--on-primary, var(--on-primary-container));
cursor: pointer;
transition: var(--easing-fast-spatial);
left: .4rem;
top: 50%;
translate: 0 -50%;
display: flex;
align-items: center;
justify-content: center;
}
.switch input {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
border-radius: var(--rounding-full);
height: 3rem;
margin: -.5rem 0;
pointer-events: none;
position: absolute;
transform: translateX(-.5rem);
transition: .1s;
width: 3rem;
z-index: 1
}
.switch:hover input {
background: rgb(from var(--primary) r g b/10%)
}
.switch>input:checked {
transform: translateX(.75rem)
}
.switch>input:checked+span {
background: var(--primary);
border-color: var(--primary);
}
.switch>input:hover+span:before {
background: var(--on-surface-variant)
}
.switch>input:checked:hover+span:before {
background: var(--primary-container)
}
.switch>input:checked+span::before {
background-color: var(--on-primary);
scale: 1.5;
left: 1.65rem;
}
.switch:active>input+span::before {
scale: 1.75;
}
.switch>input+span:after {
border: solid transparent;
border-width: 0 .1em .1em 0;
content: "";
display: block;
height: .55rem;
left: .7rem;
position: absolute;
top: .5rem;
transform: translateX(0) rotate(45deg);
transition: var(--easing-fast-spatial);
width: .275rem
}
.switch>input:checked+span:after {
border-color: var(--primary);
transform: translateX(1.25rem) rotate(45deg)
}
.tabs {
display: flex;
border-bottom: 1px solid var(--outline-variant);
}
.tabs.variable {
padding: 0 1rem;
}
.tabs.variable > * {
width: -moz-max-content;
width: max-content;
padding: 0.65rem 1rem;
height: 4rem;
}
.tabs > * {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
position: relative;
font-size: 0.875rem;
font-weight: 500;
padding: 0 0;
height: 3rem;
cursor: pointer;
width: 100%;
text-align: center;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
transition: 0.1s;
}
.tabs iconify-icon {
display: flex ;
flex: 1 ;
flex-grow: 1 ;
font-size: 1.5rem;
}
.tabs > label:has(input:checked) {
color: var(--primary);
}
.tabs > label::after {
content: "";
position: absolute;
top: auto;
bottom: 0;
left: 0;
right: 0;
height: 0;
width: 3rem;
margin: 0 auto;
background: var(--primary);
border-radius: .1875rem .1875rem 0 0;
transition: height var(--easing-fast-spatial);
}
.tabs > label:has(input:checked)::after {
height: .1875rem;
}
[class*=tooltipped] {
position: relative;
}
[class*=tooltipped]:hover::after {
visibility: visible;
opacity: 1;
}
[class*=tooltipped]:focus {
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
[class*=tooltipped]::after {
--space: 0.35rem;
content: attr(aria-label);
background-color: var(--inverse-surface);
color: var(--inverse-on-surface);
text-align: left;
position: absolute;
visibility: hidden;
padding: 0.4rem 0.6rem;
border-radius: var(--rounding-extra-small);
font-size: 0.75rem;
white-space: nowrap;
opacity: 0;
transition: all 0.3s var(--curve-decel);
z-index: 1000;
pointer-events: none;
}
[class*=tooltipped].rich::after {
white-space: normal;
width: 14rem;
padding: 1rem 0.85rem;
font-size: 0.875rem;
border-radius: var(--rounding-small);
box-shadow: var(--elevation-3);
}
.tooltipped::after {
bottom: 100%;
left: 50%;
transform: translateX(-50%) scale(0.7);
margin-bottom: var(--space);
}
.tooltipped-bottom::after {
top: 100%;
left: 50%;
transform: translateX(-50%) scale(0.7);
margin-top: var(--space);
}
.tooltipped-left::after {
top: 50%;
right: 100%;
transform: translateY(-50%) scale(0.8);
margin-right: var(--space);
}
.tooltipped-right::after {
top: 50%;
left: 100%;
transform: translateY(-50%) scale(0.8);
margin-left: var(--space);
}
.tooltipped:hover::after,
.tooltipped-bottom:hover::after,
.tooltipped:focus::after,
.tooltipped-bottom:focus::after {
transform: translateX(-50%) scale(1);
}
.tooltipped-left:hover::after,
.tooltipped-right:hover::after,
.tooltipped-left:focus::after,
.tooltipped-right:focus::after {
transform: translateY(-50%) scale(1);
}
:is(h1, h2, h3, h4, h5, h6),
[class^="display"] {
display: block;
font-weight: 400;
margin: 0.75rem 0;
line-height: normal;
}
h1 {
font-size: 3.5625rem;
}
h2 {
font-size: 2.8125rem;
}
h3 {
font-size: 2.25rem;
}
h4 {
font-size: 2rem;
}
h5 {
font-size: 1.75rem;
}
h6 {
font-size: 1.5rem;
}
h1.small {
font-size: 3.0625rem;
}
h2.small {
font-size: 2.3125rem;
}
h3.small {
font-size: 1.75rem;
}
h4.small {
font-size: 1.5rem;
}
h5.small {
font-size: 1.25rem;
}
h6.small {
font-size: 1rem;
}
h1.display,
.display-xxxl {
font-size: 4.25rem;
}
h2.display,
.display-xxl,
.text-xxxl {
font-size: 3.75rem;
}
h3.display,
.display-xl,
.text-xxl {
font-size: 3rem;
}
h4.display,
.display-l,
.text-xl {
font-size: 2.125rem;
}
h5.display,
.display-base,
.text-lg {
font-size: 1.25rem;
}
h6.display,
.display-sm,
.text-base {
font-size: 1rem;
}
.text-sm {
font-size: 0.875rem;
line-height: 1.25rem;
letter-spacing: 0.015625rem;
}
a:not(.btn, :has(*:not(span))) {
color: inherit;
background: linear-gradient(to top, var(--primary) 50%, transparent 50%);
background-size: 100% 200%;
background-position: 0 7.5%;
border-radius: var(--rounding-extra-small);
background-repeat: no-repeat;
transition: 0.25s;
will-change: background-position;
}
a:not(.btn, :has(*:not(span))):hover {
color: var(--on-primary);
background-position: 0 100%;
}
code,
kbd {
background: var(--surface-variant);
font-size: 0.9rem;
border-radius: 0.25rem;
letter-spacing: 0;
padding: 0 0.25rem;
}
kbd {
border: 1px solid var(--outline);
border-bottom: 3px solid var(--outline);
}
pre {
letter-spacing: 0;
overflow-x: auto;
}
hr {
border: none;
height: 0.025rem;
background: var(--outline-variant);
}
blockquote {
background: var(--surface-container-highest);
border-radius: var(--rounding-medium);
border-left: 0.25rem dotted var(--primary);
margin: 0;
padding: 0.75rem 1rem;
}
pre {
background: var(--surface-container-highest);
padding: 0.75rem;
border-radius: var(--rounding-medium);
margin: 0;
}
pre>code {
padding: 0;
font-size: 1rem;
}
table {
width: 100%;
border-collapse: collapse;
}
table :is(th, td) {
padding: 0.35rem;
text-align: left;
}
table th:not(tfoot th) {
border-bottom: 1px solid var(--outline);
}
table tfoot th {
border-top: 1px solid var(--outline);
}
.primary {
background: var(--primary) ;
color: var(--on-primary) ;
}
.primary-container {
background: var(--primary-container) ;
color: var(--on-primary-container) ;
}
.secondary {
background: var(--secondary) ;
color: var(--on-secondary) ;
}
.secondary-container {
background: var(--secondary-container) ;
color: var(--on-secondary-container) ;
}
.tertiary {
background: var(--tertiary) ;
color: var(--on-tertiary) ;
}
::-moz-selection {
background: var(--tertiary-container) ;
color: var(--on-tertiary-container) ;
}
.tertiary-container,
::selection {
background: var(--tertiary-container) ;
color: var(--on-tertiary-container) ;
}
.background {
background: var(--background) ;
color: var(--on-background) ;
}
.surface {
background: var(--surface) ;
color: var(--on-surface) ;
}
.inverse-surface {
background: var(--inverse-surface) ;
color: var(--inverse-on-surface) ;
}
.surface-variant {
background: var(--surface-variant) ;
color: var(--on-surface-variant) ;
}
.error {
background: var(--error) ;
color: var(--on-error) ;
}
.error-container {
background: var(--error-container) ;
color: var(--on-error-container) ;
}
.accent-gradient {
background-image: linear-gradient(to bottom, var(--primary-container), var(--tertiary-container)) ;
color: var(--on-primary-container) ;
}
:where([class*=shadow]) {
box-shadow: var(--shadow-size) ;
--shadow-size: var(--elevation-2);
}
.shadow-none {
--shadow-size: 0;
}
.shadow-auto {
--shadow-size: auto;
}
.shadow-s {
--shadow-size: var(--elevation-1);
}
.shadow-l {
--shadow-size: var(--elevation-3);
}
.shadow-xl {
--shadow-size: var(--elevation-4);
}
.shadow-xxl {
--shadow-size: var(--elevation-5);
}
:where([class*=margin]):not(.margin-left, .margin-right, .margin-top, .margin-bottom, .margin-horiz, .margin-vert) {
margin: var(--margin-size) ;
}
:where([class*=margin]) {
--margin-size: 1rem;
}
.margin-none {
--margin-size: 0;
}
.margin-auto {
--margin-size: auto;
}
.margin-xs {
--margin-size: 0.25rem;
}
.margin-s {
--margin-size: 0.5rem;
}
.margin-l {
--margin-size: 1.5rem;
}
.margin-xl {
--margin-size: 2rem;
}
.margin-left,
.margin-horiz {
margin-inline-start: var(--margin-size) ;
}
.margin-right,
.margin-horiz {
margin-inline-end: var(--margin-size) ;
}
.margin-top,
.margin-vert {
margin-block-start: var(--margin-size) ;
}
.margin-bottom,
.margin-vert {
margin-block-end: var(--margin-size) ;
}
:where([class*=br]) {
display: block;
}
:where([class*=padding]):not(.padding-left, .padding-right, .padding-top, .padding-bottom, .padding-horiz, .padding-vert),
:where([class*=br]) {
padding: var(--padding-size) ;
}
:where([class*=padding]) {
--padding-size: 1rem;
}
.padding-none {
--padding-size: 0;
}
.padding-auto {
--padding-size: auto;
}
.padding-xs,
.br {
--padding-size: 0.25rem;
}
.padding-s,
.br-l {
--padding-size: 0.5rem;
}
.padding-l,
.br-xl {
--padding-size: 1.5rem;
}
.padding-xl {
--padding-size: 2rem;
}
.padding-left,
.padding-horiz {
padding-inline-start: var(--padding-size) ;
}
.padding-right,
.padding-horiz {
padding-inline-end: var(--padding-size) ;
}
.padding-top,
.padding-vert {
padding-block-start: var(--padding-size) ;
}
.padding-bottom,
.padding-vert {
padding-block-end: var(--padding-size) ;
}
:where([class*=gap]) {
gap: var(--gap-size) ;
--gap-size: 1rem;
}
.gap-none {
--gap-size: 0;
}
.gap-auto {
--gap-size: auto;
}
.gap-xs {
--gap-size: 0.25rem;
}
.gap-s {
--gap-size: 0.5rem;
}
.gap-l {
--gap-size: 1.5rem;
}
.gap-xl {
--gap-size: 2rem;
}
:where([class*=round]) {
border-radius: var(--round-size) ;
--round-size: var(--rounding-medium);
}
.round-none {
--round-size: var(--rounding-none);
}
.round-xs {
--round-size: var(--rounding-extra-small);
}
.round-s {
--round-size: var(--rounding-small);
}
.round-l {
--round-size: var(--rounding-large);
}
.round-xl {
--round-size: var(--rounding-extra-large);
}
.round-full {
--round-size: var(--rounding-full);
}
.hidden {
display: none ;
}
.block {
display: block ;
}
.inline-block {
display: inline-block ;
}
.inline {
display: inline ;
}
.flex {
display: flex ;
}
.inline-flex {
display: inline-flex ;
}
.flex-row {
flex-direction: row ;
}
.flex-col {
flex-direction: column ;
}
.flex-wrap {
flex-wrap: wrap ;
}
.flex-nowrap {
flex-wrap: nowrap ;
}
.flex-max,
.all-max * {
display: flex ;
flex: 1 ;
flex-grow: 1 ;
}
:where([class*=align]) {
align-content: var(--alignment) ;
align-items: var(--alignment) ;
align-self: var(--alignment) ;
}
.align-start {
--alignment: start;
}
.align-end {
--alignment: end;
}
.align-center {
--alignment: center;
}
.align-baseline {
--alignment: baseline;
}
.align-stretch {
--alignment: stretch;
}
:where([class*=justify]) {
justify-content: var(--justification) ;
justify-items: var(--justification) ;
justify-self: var(--justification) ;
}
.justify-left {
--justification: left;
}
.justify-center {
--justification: center;
}
.justify-right {
--justification: right;
}
.justify-between {
--justification: space-between;
}
.justify-around {
--justification: space-around;
}
:where([class*=text]) {
text-align: var(--text) ;
}
.text-left {
--text: left;
}
.text-center {
--text: center;
}
.text-right {
--text: right;
}
:where([class*=overflow]) {
overflow: var(--overflow) ;
}
.overflow-auto {
--overflow: auto;
}
.overflow-hidden {
--overflow: hidden;
}
.overflow-visible {
--overflow: visible;
}
.overflow-scroll {
--overflow: scroll;
}
:where([class*=width]) {
width: var(--width) ;
}
.width-min {
--width: min-content;
}
.width-max {
--width: max-content;
}
.width-fit {
--width: fit-content;
}
.width-full {
--width: 100%;
}
.scroll {
overflow-x: auto ;
}
.scroll-y {
overflow-y: auto ;
}