/*! Theme Name: Jake Van Base Theme Theme URI: https://jakevan.ca Author: Jake Vanderwerf Author URI: https://jakevan.ca Description: A base theme for Jake Van clients Requires at least: 6.4 Tested up to: 6.4 Requires PHP: 8.0 Version: 1.6.0 License: GNU General Public License v2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html Text Domain: jv */ /************************************************************* VARIABLES *************************************************************/ :root { /***************************** Layout *****************************/ --half: min(384px, 17.5vw); --narrow: min(500px, 62.5vw); --content: min(768px, 65vw); --wider: min(900px, 75vw); --wide: min(1024px, 90vw); --full: 100vw; --offScreen: -200vw; /***************************** Sizing *****************************/ --chip: 1.5rem; --chipchip: 3rem; --chip_: 2rem; --btn: 4rem; --btn_: 5rem; --btnbtn: 8rem; --maxHeight: calc(100vh - var(--btnbtn)); /***************************** Flex *****************************/ --dir: row; --justify: center; --align: center; --wrap: wrap; --gap: .5rem; /***************************** Typography *****************************/ --w: 1.2em; /** For icons **/ --font-base: -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, helvetica neue, helvetica, Cantarell, Ubuntu, roboto, noto, arial, sans-serif; --heading: 'Aleo', var(--font-base); --body: 'Josefin Slab', var(--font-base); --fw-h-light: 400; --fw-h: 900; --fw-h-bold: 900; --fw-b-light: 200; --fw-b: 400; --fw-b-bold: 700; --txt-small: clamp(.75rem, 1.1337rem + -1.2278vw, .059375rem); --txt-x-small: clamp(.95rem, .879rem + .19vw, 1.05rem); --txt-medium: clamp(1.1rem, .993rem + .286vw, 1.25rem); --txt-x-medium: clamp(1.4rem, .971rem + 1.143vw, 2rem); --txt-large: clamp(1.3rem, .6rem + 1.867vw, 2rem); --txt-x-large:clamp(1.6rem, .957rem + 1.714vw, 2.5rem); --txt-xx-large: clamp(2rem, 1.286rem + 1.905vw, 3rem); --txt-xxx-large: clamp(2.5rem, 1.429rem + 2.857vw, 4rem); --txt-enormous: calc(26vh - 4rem); /***************************** Colours *****************************/ --filter: grayscale(.3) sepia(.4); --mix-blend-mode: darken; --coverBlend: overlay; --coverIndex: 2; --light-0: 239,239,239; /* #efefef; */ --light-50: 226,226,226; /* #e2e2e2; */ --light-100: 213,213,213; /* #d5d5d5; */ --light-200: 201,201,201; /* #c9c9c9; */ --dark-0: 21,21,21; /* #151515; */ --dark-50: 34,34,34; /* #222222; */ --dark-100: 46,46,46; /* #2e2e2e; */ --dark-200: 59,59,59; /* #3b3b3b; */ --action-0: 255,0,128; /* #ff0080; */ --action-50: 255,38,146; /* #ff2492; */ --action-100: 255,71,164; /* #ff47a4; */ --action-200: 255,107,181; /* #ff6bb5; */ --action-contrast: var(--light-0); --action-comp: oklch(from rgb(var(--action-0)) .8 .26 h); --action-tri: oklch(from rgb(var(--action-0)) .82 .2 calc(h - 120)); --action-mono: oklch(from rgb(var(--action-0)) .3 .04 h); --secondary-0: 214,145,33; /* #D69121; */ --secondary-50: 255,196,33; /* #ffc421; */ --secondary-100: 255,205,68;/* #ffcd44; */ --secondary-200: 255,215,104;/* #ffd768; */ --secondary-contrast: var(--light-0); --secondary-comp: oklch(from rgb(var(--secondary-0)) .8 .26 h); --secondary-tri: oklch(from rgb(var(--secondary-0)) .82 .2 calc(h - 120)); --secondary-mono: oklch(from rgb(var(--secondary-0)) .3 .04 h); --success: 76,175,80; /* #4CAF50; */ --successLight: 234,246,235; /* #eaf6eb; */ --successDark: 14,33,15; /* #0e210f; */ --successBack: var(--successLight); --successText: var(--successDark); --warning: 232,167,55; /* #E8A737; */ --warningLight: 253,247,238;/* #fdf7ee; */ --warningDark: 52,35,6; /* #342306; */ --warningBack: var(--warningLight); --warningText: var(--warningDark); --error: 183,51,46; /* #B7332E; */ --errorLight: 250,235,234; /* #faebea; */ --errorDark: 40,11,10; /* #280b0a; */ --errorBack: var(--errorLight); --errorText: var(--errorDark); --base: var(--light-0); --base-50: var(--light-50); --base-100: var(--light-100); --base-200: var(--light-200); --contrast: var(--dark-0); --contrast-50: var(--dark-50); --contrast-100: var(--dark-100); --contrast-200: var(--dark-200); --contrast-comp: oklch(from rgb(var(--contrast)) .8 .26 h); --contrast-tri: oklch(from rgb(var(--contrast)) .82 .2 calc(h - 120)); --contrast-mono: oklch(from rgb(var(--contrast)) .3 .04 h); --base-comp: oklch(from rgb(var(--base)) .8 .26 h); --base-tri: oklch(from rgb(var(--base)) .82 .2 calc(h - 120)); --base-mono: oklch(from rgb(var(--base)) .3 .04 h); --tone-a: rgb(var(--contrast)); --tone-b: rgb(var(--base)); --duo-dark: oklch(from var(--tone-a) .22 c h); --duo-light: oklch(from var(--tone-b) .78 c h); --shimmer: rgba(var(--contrast),0) 0%, rgba(var(--contrast),.05) 50%, rgba(var(--contrast),0) 100%; --op-1: .05; --op-2: .15; --op-3: .25; --op-45: .45; --op-4: .66; --op-5: .75; --op-6: .85; /***************************** Shadows *****************************/ --shdw-inset: inset 0 0 4px 1px; --shdw: 0 0 4px; --shdw-down: 0 6px 5px -5px; --shdw-right: 6px 0 5px -5px; --shdw-left: -6px 0 5px -5px; --shdw-up: 0 -6px 5px -5px; --shdw-subtle: 0 25px 20px -20px; --shdw-subtle-right: 10px 0 20px -20px; --shdw-none: transparent 0 0 0; /***************************** Stacking *****************************/ --z-1: 5; --z-2: 10; --z-3: 15; --z-4: 20; --z-5: 50; --z-6: 100; --z-7: 999; --z-8: 1000; --z-9: 999999; --z-10: 9999999; /***************************** Rounding *****************************/ --radius: 4px; --p-outer: 1rem; --radius-outer: calc(var(--radius) + var(--p-outer)); --p-y: var(--sp1); --p-x: var(--sp1); /***************************** Transitions *****************************/ --trans-fn: cubic-bezier(.47,.24,.07,.47); --trans-t: .25s; --trans-base: var(--trans-t) var(--trans-fn); --trans-color: background-color var(--trans-base), color var(--trans-base), border var(--trans-base); --trans-transform: transform var(--trans-base); --trans-size: width var(--trans-base), height var(--trans-base),max-width var(--trans-base), max-height var(--trans-base); --trans-vis: opacity var(--trans-base); /***************************** Spacing *****************************/ --sp1: clamp(0.5rem, 0.714vw + 0.321rem, 1rem); /* 8px → 16px */ --sp2: clamp(0.75rem, 1.071vw + 0.482rem, 1.5rem); /* 12px → 24px */ --sp3: clamp(1rem, 1.429vw + 0.643rem, 2rem); /* 16px → 32px */ --sp4: clamp(1.5rem, 2.143vw + 0.964rem, 3rem); /* 24px → 48px */ --sp5: clamp(2rem, 2.857vw + 1.286rem, 4rem); /* 32px → 64px */ --sp6: clamp(3rem, 4.286vw + 1.929rem, 6rem); /* 48px → 96px */ --sp7: clamp(4rem, 5.714vw + 2.571rem, 8rem); /* 64px → 128px */ /***************************** Scrollbar *****************************/ --sb-width: 8px; --sb-track: rgb(var(--base-100)); --sb-thumb: rgb(var(--action-0)); --sb-thumb-hover: rgb(var(--action-50)); --sb-thumb-border: 2px solid rgb(var(--base-50)); --sb-radius: 4px; --details: url('data:image/svg+xml,'); --link: url('data:image/svg+xml,'); } body:has(#theme-switcher:checked){ /***************************** Colours *****************************/ --mixBlendMode: lighten; --coverBlend: multiply; --coverIndex: 0; --action-50: 219,0,110; /* #db006e; */ --action-100: 184,0.92; /* #b8005c; */ --action-200: 148,0,74; /* #94004a; */ --secondary-50: 216,159,0; /* #d89f00; */ --secondary-100: 181,133,0; /* #b58500; */ --secondary-200: 145,106,0; /* #916a00; */ --contrast: var(--light-0); --contrast-50: var(--light-50); --contrast-100: var(--light-100); --contrast-200: var(--light-200); --contrast: var(--light-rgb); --base: var(--dark-0); --base-50: var(--dark-50); --base-100: var(--dark-100); --base-200: var(--dark-200); --base: var(--dark-rgb); --successBack: var(--successDark); --successText: var(--successLight); --warningBack: var(--warningDark); --warningText: var(--warningLight); --errorBack: var(--errorDark); --errorText: var(--errorLight); --shimmer: rgba(var(--light-0),0) 0%, rgba(var(--light-0),.05) 50%, rgba(var(--light-0),0) 100%; } /* https://frontendmasters.com/blog/the-coyier-css-starter/ */ @layer reset { html { color-scheme: light dark; font: clamp(1rem, 1rem + 0.5vw, 2rem) / 1.4 system-ui, sans-serif; tab-size: 2; hanging-punctuation: first allow-end last; word-break: break-word; } body { margin: 0; } *, *::before, *::after { box-sizing: border-box; } h1, h2 { font-weight: 900; letter-spacing: -0.02rem; } h1, h2, h3 { line-height: 1.1; } h1, h2, h3, h4, h5, h6 /* FUTURE :heading */ { text-wrap: balance; margin-block-start: 0; } p, li, dd { text-wrap: pretty; max-inline-size: 88ch; } a { color: oklch(0.68 0.17 228); text-underline-offset: 2px; &:not(:is(:hover, :focus)) { text-decoration-color: color-mix(in srgb, currentColor, transparent 50%); } } sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub { inset-block-end: -0.25em; } sup { inset-block-start: -0.5em; } ul, ol, dl { margin: 0; padding: 0; list-style: outside; ul, ol, dl { padding-inline-start: 2ch; } } li { padding-bottom: .5rem; } img, video, iframe { display: block; max-inline-size: 100%; block-size: auto; border-style: none; } figure { inline-size: fit-content; margin-inline: auto; } figure img { width: 100%; height: 100%; object-fit: cover; } figcaption { contain: inline-size; font-size: 90%; background-color: rgba(var(--base),var(--op-3)); text-align: center; font-style: italic; } input, select, textarea, button { font: inherit; /* FUTURE: appearance: base; */ } label { display: block; } input:not( :where( [type="submit"], [type="checkbox"], [type="radio"], [type="button"], [type="reset"] ) ) { inline-size: 100%; } button, input:where( [type="submit"], [type="reset"], [type="button"] ) { background: CanvasText; color: Canvas; border: 1px solid transparent; } textarea { field-sizing: content; min-block-size: 5lh; inline-size: 100%; max-inline-size: 100%; } pre, code, kbd, samp { font-family: ui-monospace, SFMono-Regular, monospace; } svg { fill: currentColor; } [aria-disabled="true" i], [disabled] { cursor: not-allowed; } [hidden] { display: none !important; } [disabled], label:has(input[disabled]) { opacity: 0.5; [disabled] { opacity: 1; } } pre { white-space: pre-wrap; background: CanvasText; color: Canvas; padding: 1.5rem; } hr.logo::after, hr { --margin: 12.5%; /* Half of the remaining 25% */ --baseWidth: 75%; border-style: solid; border-width: 1px 0 0; border-color: rgb(var(--contrast)); color: inherit; height: 1px; overflow: visible; margin-block: 2.5rem; width: var(--baseWidth); } hr.logo { --width: calc((rgb(var(--baseWidth)) / 2) - var(--half)); --half: calc(var(--btn) / 2); width: var(--width); position: relative; margin-left: var(--margin); } hr.logo::before { content: ''; --circ: calc(var(--btn) + (var(--btn) / 2)); --rad: calc(var(--circ) / 2); background-color: rgb(var(--contrast-100)); mask-image: var(--icon); -webkit-mask-image: var(--icon); mask-size: var(--btn); -webkit-mask-size: contain; mask-repeat: no-repeat; -webkit-mask-repeat: no-repeat; mask-position: center; -webkit-mask-position: center; display: block; width: var(--circ); height: var(--circ); position: absolute; border-radius: 50%; right: calc(-1 * (var(--circ))); top: 0; transform: translateY(-50%); } hr.logo::after { content: ''; display: block; width: 100%; position: absolute; z-index: 0; top: 0; transform: translateY(050%); background-color: rgb(var(--contrast)); height: 1px; right: calc((100% + var(--btn_) + 1rem) * -1); margin: 0; } hr.dots { border-color: transparent; display:flex; } hr.dots::before { content: '.\2003.\2003.'; margin: 0 auto; } :target { scroll-margin: 3rlh; } table { caption-side: bottom; border-collapse: collapse; td { font-size: 90%; } td, th { word-break: normal; border: 1px solid gray; padding: 0.5rem; } } [role="region"][aria-labelledby][tabindex] { overflow: auto; } caption { font-size: 90%; } .screen-reader-text:not(:focus):not(:active) { clip: rect(0 0 0 0); clip-path: inset(50%); height: 1px; overflow: hidden; position: absolute; white-space: nowrap; width: 1px; } :focus-visible { outline-offset: 2px; } @media (prefers-reduced-motion: no-preference) { @view-transition { navigation: auto; } html { interpolate-size: allow-keywords; &:focus-within { scroll-behavior: smooth; } } } } /************************************************************* SCROLLBAR *************************************************************/ * { scrollbar-width: thin; scrollbar-color: var(--sb-thumb) var(--sb-track); } /* For WebKit browsers (Chrome, Safari, etc.) */ ::-webkit-scrollbar { width: var(--sb-width); height: var(--sb-width); } ::-webkit-scrollbar-track { background: var(--sb-track); } ::-webkit-scrollbar-thumb { background-color: var(--sb-thumb); border-radius: var(--sb-radius); border: var(--sb-thumb-border); } ::-webkit-scrollbar-thumb:hover { background-color: var(--sb-thumb-hover); } /************************************************************* BASE *************************************************************/ body { background-color: rgb(var(--base-50)); color: rgb(var(--contrast)); margin: 0; font-family: var(--body); font-weight: var(--fw-b); font-size: var(--txt-medium); line-height: 1.4; position: relative; max-width: 100vw; } body, body * { transition: var(--trans-color) } /************************************************************* LAYOUT *************************************************************/ html { scroll-behavior: smooth; overflow-x: hidden; } @media(prefers-reduced-motion){ html { scroll-behavior: unset; } * { transition: none!important; animation: none!important; } } /*body:has(aside.expanded),*/ /*body:has(nav.open:not(.drawer)),*/ /*body:has(dialog[open]),*/ /*body.loading {*/ /* overflow: hidden;*/ /* max-height: 100vh;*/ /*}*/ main { --gapNarrow: calc((var(--content) - var(--narrow)) / 2); --gapContent: calc((var(--wider) - var(--content)) / 2); --gapWide: calc((var(--wide) - var(--wider)) / 2); display: grid; grid-template-columns: [full-start] minmax(1rem, 1fr) [wide-start] minmax(0, var(--gapWide)) [wider-start] minmax(0, var(--gapContent)) [content-start] minmax(0, var(--gapNarrow)) [narrow-start] min(calc(100% - 2rem), var(--narrow)) [narrow-end] minmax(0, var(--gapNarrow)) [content-end] minmax(0, var(--gapContent)) [wider-end] minmax(0, var(--gapWide)) [wide-end] minmax(1rem, 1fr) [full-end]; min-height: var(--maxHeight); grid-auto-rows: max-content; } main > * { grid-column: content; } main > section { padding: 3rem 0; grid-column: full; } main > section > * { width: 100%; max-width: var(--content); margin: var(--sp1) auto; } ul { max-width: var(--narrow); margin: 1rem auto 1rem 3rem; } ul ul { padding: .25rem 0 .25rem 1rem; margin: 0; } /* Nested items can use any width */ main .align-narrow { grid-column: narrow; } main .align-content { grid-column: content; } main .align-wider { grid-column: wider; width: 100%; } main .align-wide { grid-column: wide; width: 100%; } main .align-full { grid-column: full; width: 100%; max-width: none; } /* First child has no top spacing */ main > *:first-child { margin-top: 0; } .wp-site-blocks > header { position: sticky; top: 0; z-index: var(--z-8); background-color: rgb(var(--base)); box-shadow: rgba(var(--base), var(--op-45)) var(--shdw-down); transition: top var(--trans-base); } header a[rel="home"] { display: flex; align-items: center; max-height:var(--btn); overflow:hidden; margin: 0 auto; } .scroll-progress { position: absolute; inset-inline: 0; bottom: 0; height: 3px; display: flex; align-items: center; pointer-events: none; z-index: var(--z-3); background-color: rgb(var(--base-200)); overflow: hidden; } .scroll-progress .bar { width: 100%; height: 1px; transform-origin: left center; transform: scaleX(0); background: rgb(var(--action-0)); } footer { padding: 1rem; background-color: rgb(var(--base)); color: rgb(var(--contrast-200)); text-align: center; margin: 4rem 0 0; position: relative; z-index: var(--z-7); } footer p { margin: 0 auto; } body:has(nav.fixed.bottom,nav.on-this-page) footer { padding-bottom: var(--btn_); } @media (min-width:768px) { footer { padding: 1rem 2rem var(--btn_); } } *:target { scroll-snap-margin-top: var(--btnbtn); scroll-margin-top: var(--btnbtn); outline: double rgb(var(--action-200)); background-color: rgb(var(--base)); } /*********************** PRE/SUB HEADER ***********************/ aside.header, aside.footer { padding: 0 1rem; font-size: var(--txt-x-small); z-index: var(--z-7); background-color: rgb(var(--base-50)); } aside.header { height: var(--chip_); --wrap: nowrap; } aside.footer p, aside.header p { width: max-content; } aside.footer { --dir: column; background-color:rgb(var(--base-50)); padding: 1rem; border-top: 1px solid rgb(var(--base-200)); } aside.footer + footer { margin-top: 0; } aside.header p ,aside.footer p { margin: 0.125rem 0; } aside.pre { position: sticky; top: -2rem; transition: top var(--trans-base); } .scroll-up aside.pre { top: 0; } .scroll-up .pre ~ header { top: calc(var(--chip_) - 2px); } /*********************************************************** TYPOGRAPHY ***********************************************************/ body :is(b, strong) { font-weight: var(--fw-b-bold); } :is(h1, h2, h3, h4, h5, h6) { font-family: var(--heading); text-transform: uppercase; font-weight: var(--fw-h); line-height: 1.3; margin: 1.5em auto .25em; width: 100%; } :is(h1,h2,h3,h4,h5,h6), p { width: 100%; } .group :is(h1,h2,h3,h4,h5,h6), p { width: max-content; max-width: 100%; } :is(h1, h2, h3, h4, h5, h6) :is(b, strong) { font-weight: var(--fw-h-bold); letter-spacing: 2px; } :is(h1, h2, h3, h4, h5, h6) small { display: block; line-height: .8; font-family: var(--body); font-size: .5em; } :is(h1, h2, h3, h4, h5, h6) small :is(b, strong) { font-weight: var(--fw-b-bold); } :is(h1, h2, h3, h4, h5, h6).inline { font-size: 1.2rem; font-weight: var(--fw-h-bold); display: inline-block; margin: 0 2rem 0 0; letter-spacing: .05em; } :is(h1, h2, h3, h4, h5, h6).inline + * { display: inline-block; margin: .5rem 0; } h1 { font-size: var(--txt-xxx-large); font-weight: var(--fw-h); line-height: 1; margin: 10vh auto .25em; } h1 small + small { display: inline-block; font-size: var(--txt-large); margin-right: .5rem; } h2 { font-size: var(--txt-xx-large); } h3 { font-size: var(--txt-x-large); } h4 { font-weight: 400; font-size: var(--txt-large); } h5, h6 { font-weight: 400; font-size: var(--txt-medium); } p { line-height: 1.6; } .drop-cap::first-letter { font-family: var(--heading); font-size: var(--btn); line-height: 1; background-color: rgb(var(--action-0)); color: rgb(var(--action-contrast)); float: left; font-weight: var(--fw-h-bold); margin: 0.1em 0.1em 0.2em 0; padding: 0.1em; } :not(.row >) p:has(+p) { margin-bottom: 0; } :not(.row >) p + p { margin-top: 0; } .hint { line-height: 1.2; font-style: italic; font-size: var(--txt-small); } mark { background-color: rgba(var(--action-0), var(--op-45))!important; color: rgb(var(--action-contrast))!important; border-top-left-radius: .5em; border-bottom-right-radius: .5em; padding: 0 .5em; corner-shape: bevel; } /****************************************************** LINKS ******************************************************/ a { color: rgb(var(--action-0)); border-radius: 4px; padding: .125rem; } a:visited { color: rgb(var(--action-100)); } a:hover, a:visited:hover { color: rgb(var(--contrast-50)); text-decoration: none; } :is(p, li, h1,h2,h3,h4,h5,h6, small) a:hover { color: var(--action-contrast); background-color: rgb(var(--action-0)); } a.logo { display: inline-flex; } .logo img { max-width: 150px; } /***************************************************** ICONS *****************************************************/ i.icon { width: var(--w); height: var(--w); display: inline-block; background-color: currentColor; mask-image: var(--icon); -webkit-mask-image: var(--icon); mask-size: contain; -webkit-mask-size: contain; mask-repeat: no-repeat; -webkit-mask-repeat: no-repeat; mask-position: center; -webkit-mask-position: center; vertical-align: middle; } /** SWITCHING ICONS **/ /**** If, say, a button has two icons, one gets hidden on one state, and one gets shown on another, add it here **/ .favourite:not(.favourited) .heart-fill, .favourite.favourited .heart, .notifications:not(.has) .bell-ringing, .notifications.has .bell, .vote button:not(.voted) .upvoted, .vote button:not(.voted) .downvoted, .vote .voted .upvote, .vote .voted .downvote { display: none; } .favourite:not(.favourited) .heart, .favourite.favourited .heart-fill, .notifications:not(.has) .bell, .notifications.has .bell-ringing, .vote button:not(.voted) .upvote, .vote button:not(.voted) .downvote, .vote .voted .upvoted, .vote .voted .downvoted { display: block; } /******************************************************* LISTS *******************************************************/ ol { list-style-type: decimal; } ul.terms { display: grid; grid-template-columns: repeat(2, 1fr); } ul.terms li { list-style: none; } .term-list.cloud { display: flex; gap: .25rem; margin: var(--sp2) auto; } .term-list.cloud a { border-radius: var(--radius); background-color: transparent; color: rgb(var(--action-0)); border: 2px solid rgb(var(--action-0)); padding: 4px 8px; position: relative; } .term-list.cloud a:hover, .term-list.cloud a:focus { color: var(--action-contrast); background-color: rgb(var(--action-0)); } .term-list a:has(.count) { padding-right: 1rem; } .term-list .count { position: absolute; top: .25rem; right: .25rem; /*border-radius: 50%;*/ /*aspect-ratio: 1;*/ font-size: var(--txt-small); /*background-color: rgb(var(--action-0));*/ /*color: var(--action-contrast);*/ } .term-list li { list-style: none; } .term-list a { display: inline-flex; width: max-content; } /****************************************************** UTILITY ******************************************************/ .rounded { border-radius: var(--radius-outer); } .font-small { font-size: var(--txt-x-small); } .font-medium { font-size: var(--txt-medium); } .font-large { font-size: var(--txt-large); } .font-x-large { font-size: var(--txt-x-large); } .text-center {text-align: center;} .text-right {text-align: right;} .text-left {text-align: left;} .align-center { text-align: center; margin: 0 auto;} .align-left { text-align: left; margin: 0 auto 0 0;} .align-right { text-align: right; margin: 0 0 0 auto;} *[hidden] { display: none!important; } @media (max-width: 767px){ .hide-small { display: none; } } .width-33, .width-66, .width-50, .width-25, .width-75 { width: 100%; } .w-full{ width: 100%; } @media (min-width: 768px){ .width-50 { max-width: 50%; } .width-25 { max-width: 25%; } .width-75 { max-width: 75%; } .width-33 { max-width: 33.333%; } .width-66 { max-width: 66.666% } } /** SPACING TODO: maybe scan our files for which we actually use? **/ .p-1 {padding: var(--sp1);} .p-2 {padding: var(--sp2);} .p-3 {padding: var(--sp3);} .p-4 {padding: var(--sp4);} .p-5 {padding: var(--sp5);} .p-6 {padding: var(--sp6);} .p-7 {padding: var(--sp7);} .px-1 {padding-left: var(--sp1);padding-right: var(--sp1);} .px-2 {padding-left: var(--sp2);padding-right: var(--sp2);} .px-3 {padding-left: var(--sp3);padding-right: var(--sp3);} .px-4 {padding-left: var(--sp4);padding-right: var(--sp4);} .px-5 {padding-left: var(--sp5);padding-right: var(--sp5);} .px-6 {padding-left: var(--sp6);padding-right: var(--sp6);} .px-7 {padding-left: var(--sp7);padding-right: var(--sp7);} .py-1 {padding-top: var(--sp1);padding-bottom: var(--sp1);} .py-2 {padding-top: var(--sp2);padding-bottom: var(--sp2);} .py-3 {padding-top: var(--sp3);padding-bottom: var(--sp3);} .py-4 {padding-top: var(--sp4);padding-bottom: var(--sp4);} .py-5 {padding-top: var(--sp5);padding-bottom: var(--sp5);} .py-6 {padding-top: var(--sp6);padding-bottom: var(--sp6);} .py-7 {padding-top: var(--sp7);padding-bottom: var(--sp7);} .pt-1 { padding-top: var(--sp1); } .pr-1 { padding-right: var(--sp1); } .pl-1 { padding-left: var(--sp1); } .pb-1 { padding-bottom: var(--sp1); } .pt-2 { padding-top: var(--sp2); } .pr-2 { padding-right: var(--sp2); } .pl-2 { padding-left: var(--sp2); } .pb-2 { padding-bottom: var(--sp2); } .pt-3 { padding-top: var(--sp3); } .pr-3 { padding-right: var(--sp3); } .pl-3 { padding-left: var(--sp3); } .pb-3 { padding-bottom: var(--sp3); } .pt-4 { padding-top: var(--sp4); } .pr-4 { padding-right: var(--sp4); } .pl-4 { padding-left: var(--sp4); } .pb-4 { padding-bottom: var(--sp4); } .pt-5 { padding-top: var(--sp5); } .pr-5 { padding-right: var(--sp5); } .pl-5 { padding-left: var(--sp5); } .pb-5 { padding-bottom: var(--sp5); } .pt-6 { padding-top: var(--sp6); } .pr-6 { padding-right: var(--sp6); } .pl-6 { padding-left: var(--sp6); } .pb-6 { padding-bottom: var(--sp6); } .pt-7 { padding-top: var(--sp7); } .pr-7 { padding-right: var(--sp7); } .pl-7 { padding-left: var(--sp7); } .pb-7 { padding-bottom: var(--sp7); } /** MARGIN **/ .m-0 {margin: 0;} .m-1 {margin: var(--sp1);} .m-2 {margin: var(--sp2);} .m-3 {margin: var(--sp3);} .m-4 {margin: var(--sp4);} .m-5 {margin: var(--sp5);} .m-6 {margin: var(--sp6);} .m-7 {margin: var(--sp7);} .mx-1 {margin-left: var(--sp1);margin-right: var(--sp1);} .mx-2 {margin-left: var(--sp2);margin-right: var(--sp2);} .mx-3 {margin-left: var(--sp3);margin-right: var(--sp3);} .mx-4 {margin-left: var(--sp4);margin-right: var(--sp4);} .mx-5 {margin-left: var(--sp5);margin-right: var(--sp5);} .mx-6 {margin-left: var(--sp6);margin-right: var(--sp6);} .mx-7 {margin-left: var(--sp7);margin-right: var(--sp7);} .my-1 {margin-top: var(--sp1);margin-bottom: var(--sp1);} .my-2 {margin-top: var(--sp2);margin-bottom: var(--sp2);} .my-3 {margin-top: var(--sp3);margin-bottom: var(--sp3);} .my-4 {margin-top: var(--sp4);margin-bottom: var(--sp4);} .my-5 {margin-top: var(--sp5);margin-bottom: var(--sp5);} .my-6 {margin-top: var(--sp6);margin-bottom: var(--sp6);} .my-7 {margin-top: var(--sp7);margin-bottom: var(--sp7);} .mt-1 { margin-top: var(--sp1); } .mr-1 { margin-right: var(--sp1); } .ml-1 { margin-left: var(--sp1); } .mb-1 { margin-bottom: var(--sp1); } .mt-2 { margin-top: var(--sp2); } .mr-2 { margin-right: var(--sp2); } .ml-2 { margin-left: var(--sp2); } .mb-2 { margin-bottom: var(--sp2); } .mt-3 { margin-top: var(--sp3); } .mr-3 { margin-right: var(--sp3); } .ml-3 { margin-left: var(--sp3); } .mb-3 { margin-bottom: var(--sp3); } .mt-4 { margin-top: var(--sp4); } .mr-4 { margin-right: var(--sp4); } .ml-4 { margin-left: var(--sp4); } .mb-4 { margin-bottom: var(--sp4); } .mt-5 { margin-top: var(--sp5); } .mr-5 { margin-right: var(--sp5); } .ml-5 { margin-left: var(--sp5); } .mb-5 { margin-bottom: var(--sp5); } .mt-6 { margin-top: var(--sp6); } .mr-6 { margin-right: var(--sp6); } .ml-6 { margin-left: var(--sp6); } .mb-6 { margin-bottom: var(--sp6); } .mt-7 { margin-top: var(--sp7); } .mr-7 { margin-right: var(--sp7); } .ml-7 { margin-left: var(--sp7); } .mb-7 { margin-bottom: var(--sp7); } /****************************************************** COLORS ******************************************************/ .base { --color: rgb(var(--base)); } .base-50 { --color: rgb(var(--base-50)); } .base-100 { --color: rgb(var(--base-100)); } .base-200 { --color: rgb(var(--base-200)); } .contrast { --color: rgb(var(--contrast)); } .contrast-50 { --color: rgb(var(--contrast-50)); } .contrast-100 { --color: rgb(var(--contrast-100)); } .contrast-200 { --color: rgb(var(--contrast-200)); } .action { --color: rgb(var(--action-0)); } .action-50 { --color: rgb(var(--action-50)); } .action-100 { --color: rgb(var(--action-100)); } .action-200 { --color: rgb(var(--action-200)); } .action-comp { --color: oklch(from rgb(var(--action-0)) l c calc(h + 180)); } .action-tri { --color: oklch(from rgb(var(--action-0)) .82 .2 calc(h - 120)); } .action-tri-alt { --color: oklch(from rgb(var(--action-0)) .82 .2 calc(h + 120)); } .secondary { --color: rgb(var(--secondary-0)); } .secondary-50 { --color: rgb(var(--secondary-50)); } .secondary-100 { --color: rgb(var(--secondary-100)); } .secondary-200 { --color: rgb(var(--secondary-200)); } .secondary-comp { --color: oklch(from rgb(var(--secondary-0)) l c calc(h + 180)); } .secondary-tri { --color: oklch(from rgb(var(--secondary-0)) .82 .2 calc(h - 120)); } .secondary-tri-alt { --color: oklch(from rgb(var(--secondary-0)) .82 .2 calc(h + 120)); } .hvr-bck:hover, .hvr-bck:focus, .bck { background-color: var(--color); } .bck:not(.overlay).op-1 { background-color: rgba(var(--color), var(--op-1)); } .bck:not(.overlay).op-2 { background-color: rgba(var(--color), var(--op-2)); } .bck:not(.overlay).op-3 { background-color: rgba(var(--color), var(--op-3)); } .bck:not(.overlay).op-4 { background-color: rgba(var(--color), var(--op-4)); } .bck:not(.overlay).op-45 { background-color: rgba(var(--color), var(--op-45)); } .bck:not(.overlay).op-5 { background-color: rgba(var(--color), var(--op-5)); } .bck:not(.overlay).op-6 { background-color: rgba(var(--color), var(--op-6)); } .hvr-clr:hover, .hvr-clr:focus, .clr { color: var(--color); } .hvr-brdr:hover, .hvr-brdr:focus, .brdr { border-color: var(--color); } /****************************************************************** DUOTONE *****************************************************************//******************************************************************/ .duotone { isolation: isolate; position: relative; overflow: hidden; background: rgb(var(--contrast)); } .cover img, .cover video, .duotone img, .duotone video { filter: grayscale(1) sepia(1) contrast(1.1) brightness(1.05); mix-blend-mode: multiply; z-index: 1; position: relative; } /*.duotone::after,*/ .duotone::before { content: ''; position: absolute; inset: 0; pointer-events: none; z-index: 2; } .duotone::before { mix-blend-mode: color; background-color: var(--duo-dark); opacity: var(--op-5); /*z-index: 1;*/ } .duotone:not(.cover)::after { mix-blend-mode: screen; background-color: var(--duo-light); /*z-index: 2;*/ } .duotone.action { --tone-a: rgb(var(--action-0)); --duo-dark: oklch(from rgb(var(--base)) .18 .02 h); --duo-light: oklch(from rgb(var(--action-0)) .72 .28 h); } .duotone.secondary { --tone-a: rgb(var(--secondary-0)); --duo-dark: oklch(from rgb(var(--base)) .2 .03 h); --duo-light: oklch(from rgb(var(--secondary-0)) .82 .18 h); } .duotone.complement { --duo-dark: oklch(from var(--tone-a) .22 .08 calc(h + 180)); --duo-light: oklch(from var(--tone-a) .8 .26 h); } .duotone.triadic { --duo-dark: oklch(from var(--tone-a) .24 .1 calc(h + 120)); --duo-light: oklch(from var(--tone-a) .82 .2 calc(h - 120)); } .duotone.monochrome { --duo-dark: oklch(from var(--tone-a) .3 .04 h); --duo-light: oklch(from var(--tone-a) .88 .08 h); } .duotone.film { --duo-dark: oklch(from var(--tone-a) .35 .1 h); --duo-light: oklch(from var(--dark-0) .96 .02 h); } /******************************************************************//****************************************************************** LAYOUT UTILITIES ******************************************************************/ /** Buttons **/ button, [type=submit], a.btn, .btn + label, li.btn, .buttons a, .buttons li, /** Item Grid **/ .item-grid .item, /** popups **/ aside.main, /** asides **/ aside.header, aside.footer, /** Defaults, of course **/ .row.row, .col.col { display: flex; justify-content: var(--justify); align-items: var(--align); gap: var(--gap); flex-wrap: var(--wrap); flex-direction: var(--dir); --align: center; --justify: center; --gap: .5rem; --wrap: wrap; width: 100%; } .stretch.stretch > * { flex: 1; } .col.col { --dir: column; } .row.row { --dir: row; } .col.col.rev.rev { --dir: column-reverse; } .row.row.rev.rev { --dir: row-reverse; } .nowrap.nowrap { --wrap: nowrap; } .nowrap.nowrap.stack-small { --wrap: wrap;} @media (min-width: 768px) { .nowrap.nowrap.stack-small { --wrap: nowrap;} } .row.row.top, .col.col.left { --align: flex-start; } .col.col.top, .row.row.left { --justify: flex-start; } .row.row.btm, .col.col.right { --align: flex-end; } .col.col.btm, .row.row.right { --justify: flex-end; } .row.row.x-mid, .col.col.y-mid { --justify: center; } .row.row.y-mid, .col.col.x-mid { --align: center; } .row.row.x-btw, .col.col.y-btw { --justify: space-between; } .row.row.y-btw, .col.col.x-btw { --align: space-between; } .row.row.x-even, .col.col.y-even { --justify: space-evenly; } .row.row.y-even, .col.col.x-even { --align: space-evenly; } .row.row.x-around, .col.col.y-around { --justify: space-around; } .row.row.y-around, .col.col.x-around { --align: space-around; } /************************************************* POSITION UTILITIES *************************************************/ .abs { position: absolute; } *:has(>.abs) { position: relative; } .top { top: 0; right: 0; left: 0; } .top-right { top: 0; right: 0; } .top-left { top: 0; left: 0; } .btm { bottom: 0; left: 0; right: 0; } .btm-right { bottom: 0; right: 0; } .btm-left { bottom: 0; left: 0; } .edges { inset: 0; } .hidden { transform: scale(0); max-width: 0; max-height: 0; overflow: hidden; transition: var(--trans-transform), var(--trans-size); } .visible { transform: scale(1); max-width: 100%; max-height: 100%; transition: var(--trans-transform), var(--trans-size); } /****************************************************************** THEME SWITCHER ******************************************************************/ .field .switch { display: inline-flex; } .switch .slider { --trans-t: .0125s; position: relative; width: var(--chipchip); height: var(--chip); background-color: rgb(var(--base-200)); border-radius: .75rem; overflow: hidden; display: flex; justify-content: space-between; align-items: center; border: 4px solid transparent; box-shadow: 0 0 .25rem 0 rgba(var(--contrast), .125) inset; cursor: pointer; margin: 5px; transition: var(--trans-color); } .switch .slider::before { content: ''; display: block; width: 100%; height: 100%; position: absolute; top: 0; left: 0; background-color: rgb(var(--base)); transform: translateX(-1.5rem); /* NOTE: Tied to half of the width defined above */ border-radius: .75rem; transition: var(--trans-transform); box-shadow: 0 0 .25rem 3px rgba(var(--contrast), .125); } .switch :checked ~ .slider::before { transform: translateX(1.5rem); box-shadow: 0 0 .25rem 3px rgba(var(--base), .25); } .switch :checked ~ .slider { background-color: rgb(var(--action-0)); } .switch :active ~ .slider::before { transform: translateX(0); } #theme-switch { z-index: var(--z-6); margin: 0; --wrap: nowrap; --gap: 1rem; } #theme-switch [type=checkbox] { position: absolute; left: var(--offScreen); } @media (max-width: 600px) { #theme-switch { left: 1rem; } } :checked ~ .slider .icon-sun-dim { --w: .75em; margin-top: .25em; } .slider .icon-moon { --w: .666em; margin-top: .333em; } .slider .icon-sun-dim, :checked ~ .slider .icon-moon { --w: 1em; margin-top: 0; } :not(:checked) ~ .slider .icon-sun-dim { color: rgb(var(--action-0)); } /************************************************ GRIDS/ROWS/TABLES ************************************************/ /** GRID VIEW (default) **/ .item-grid{ --columns: repeat(2, 1fr); display: grid; grid-template-columns: var(--columns); gap: 10px; } .item-grid:empty { display: none; } .no-results, .item-grid .empty { height: 15vh; background-color: rgb(var(--base-50)); border-radius: var(--radius); border: 2px dashed rgb(var(--base-200)); font-style: italic; } .item-grid.stats { --columns: repeat(2, 1fr); } @media (min-width: 768px) { .item-grid { --width: 250px; --columns: repeat(auto-fill, minmax(var(--width), 1fr)); } .item-grid.split-2 { --columns: repeat(2, 1fr); } .item-grid.split-3 { --columns: repeat(3, 1fr); } .item-grid.split-4 { --columns: repeat(4, 1fr); } .item-grid.split-5 { --columns: repeat(5, 1fr); } .item-grid.split-6 { --columns: repeat(6, 1fr); } .item-grid.split-7 { --columns: repeat(7, 1fr); } .item-grid.split-8 { --columns: repeat(8, 1fr); } .item-grid.split-9 { --columns: repeat(9, 1fr); } } .item-grid .item { border-radius: var(--radius-outer); filter: none; position: relative; } .item-grid .item .item-actions { --gap: .125rem; z-index: 1; position: absolute; top: 0; right: 0; width: calc(100% - var(--btn)); } .item-actions button, .item-actions .btn + label { min-height: var(--chipchip); width: var(--chipchip); z-index: var(--z-1); } .item-grid .item .images, .item-grid .item .images a { aspect-ratio: 1; width: 100%; height: 100%; display: flex; } .item-grid img { border-radius: var(--radius); } .item-grid .item-actions button { min-height: var(--chipchip); width: var(--chipchip); } /** LIST VIEW **/ .item-grid.list-view { display: flex; flex-direction: column; gap: 0; } .item-grid.list-view .item { aspect-ratio: unset; align-items: flex-start; border-radius: var(--radius); padding: 1rem 0; } .list-view .item:nth-of-type(even) { background-color: rgb(var(--base)); } .list-view img { width: 20%; } .item.col { --wrap: nowrap; } .empty-state { --w: 1.2em; grid-column: 1 / span 2; display: flex; flex-direction: column; justify-content: center; align-items: center; text-align: center; margin: 1rem auto; max-width: 66%; background-color: rgb(var(--base-100)); border: 2px dashed rgb(var(--base-50)); padding: 1rem; } /*********************************************** TABLES ***********************************************/ table { white-space: nowrap; width: 100%; display: table; margin: 0 0 2rem; border-radius: 4px; height: min(100%, var(--maxHeight)); color: rgb(var(--contrast)); overflow: auto; position: relative; } thead,tfoot { position: sticky; z-index: 10; background-color: rgb(var(--base)); text-transform: uppercase; padding: .5rem 0; line-height: 2; font-weight: normal; } tr:nth-of-type(even){ background-color: rgb(var(--base-200)); } tfoot th { vertical-align: middle; } tfoot th:first-of-type { text-align: right; } thead tr, tfoot tr { background-color: rgba(var(--base),var(--op-6)); box-shadow: rgba(var(--base),var(--op-45)) var(--shdw); } thead tr { border-bottom: 1px solid rgb(var(--contrast-200)); } tfoot tr { border-top: 1px solid rgb(var(--contrast-200)); } thead { top: 0; } tfoot { bottom: 0; } thead th { width: max-content; } th p { margin: 0!important; } td { width: max-content; padding: .5rem 1rem; } td .toggle input[type=checkbox] { margin: 0; } td .field { margin: .25rem 0; } td[data-id="actions"] label { margin: 0; padding: 0; } td .description { display: none; } td input[type=text] { width: fit-content; max-width: 40vw; padding: .25em!important; font-size: var(--txt-x-small)!important; } tbody tr { border: 2px solid transparent; } tbody tr:focus-within { background-color: rgb(var(--base-100)); border-color: rgb(var(--action-50)) } [data-stuck] { background-color: rgba(var(--base),var(--op-4)); position: sticky; left: -1rem; z-index: 15; box-shadow: rgba(var(--base),var(--op-45)) var(--shdw-subtle-right); } tbody [data-stuck] { z-index: 5; } thead [data-stuck], tfoot [data-stuck] { background: rgb(var(--base)); } figure:has(table) { width: 100%; height: max-content; } /*********************************************** BUTTONS ***********************************************/ button, [type=submit], a.btn, .btn + label, li.btn, .buttons a { --justify:center; --align: center; --dir: row; --wrap: nowrap; width: fit-content; text-transform: uppercase; text-decoration: none; background-color: rgb(var(--base-100)); color: rgb(var(--contrast-50)); border: 1px solid rgb(var(--base-200)); border-radius: var(--radius); padding: .25rem 1rem; font-family: var(--heading); cursor: pointer; outline: 0; min-height: var(--btn); display: inline-flex; position: relative; box-shadow: rgba(var(--base),var(--op-6)) var(--shdw-inset); } .btn.chip { min-height: var(--chip); } .buttons.left a { --justify: flex-start; } .buttons.right a { --justify: flex-end; } .buttons.x-btw a { --justify: space-between; } button.outline, [type=submit].outline, a.btn.outline, .filters .btn + label, .buttons .outline a { --color: rgb(var(--contrast)); background-color: transparent; color: var(--color); border: 1px solid var(--color); } button:hover, button:focus, [type=submit]:hover, [type=submit]:focus, a.btn:hover, a.btn:visited:hover, a.btn:focus, .btn + label:hover, .btn:focus + label, .btn:checked + label, li.btn:hover, li.btn:focus, .buttons a:hover, .buttons a:visited:hover, .buttons a:focus { background-color: rgb(var(--action-0)); color: var(--action-contrast); box-shadow: var(--shdw-none); } button.outline:hover, button.outline:focus, [type=submit].outline:hover, [type=submit].outline:focus, a.btn.outline:hover, a.btn.outline:visited:hover, a.btn.outline:focus, .filters .btn + label:hover, .filters .btn:focus + label, .buttons .outline a:hover, .buttons .outline a:visited:hover, .buttons .outline a:focus { background-color: rgb(var(--action-0)); color: var(--action-contrast); border-color: rgb(var(--action-0)); } button:disabled, button:disabled:focus, button:disabled:hover, [type=submit]:disabled, [type=submit]:disabled:focus, [type=submit]:disabled:hover, .btn:disabled + label, .btn:disabled:hover + label, .btn:disabled:focus + label { opacity: .5; cursor: not-allowed; background-color: rgb(var(--base-200)); color: rgb(var(--contrast-200)); } [type=submit] { margin: 1rem 0; } .filters .btn + label, .filters button { min-height:var(--chip); } .filters .btn + label { background-color: rgb(var(--base-100)); border: 1px solid rgb(var(--base-200)); color: rgb(var(--contrast-200)); } .filters .btn:checked + label { border-color: rgb(var(--contrast)); color: rgb(var(--contrast)); } /**** WP BLOCK BUTTONS ****/ .buttons { --wrap: wrap; --justify: flex-start; margin: 1rem auto; width: 100%; padding: 0; } .buttons li { --justify: stretch; --align: stretch; padding: 0; list-style: none; overflow: hidden; } .buttons a { width: 100%; } .buttons.fit { width: fit-content; margin: 1rem 2rem; } @media (min-width: 768px) { .buttons { max-width: var(--content); margin: 3rem auto; } } a.sticky, button.sticky, .main-actions .buttons { z-index: var(--z-6); position: fixed; bottom: var(--btn_); } body:has(.on-this-page) a.sticky, body:has(.on-this-page) button.sticky, body:has(.on-this-page) .main-actions .buttons { bottom: calc(var(--btn_) + var(--chip_)); } .main-actions .buttons button, button.sticky { width: var(--btn); height: var(--btn); background-color: rgba(var(--base),var(--op-4)); color: rgb(var(--contrast)); box-shadow: rgba(var(--base),var(--op-45)) var(--shdw); transition: var(--trans-size), var(--trans-color); } .main-actions .buttons button:hover, .main-actions .buttons button:focus, a.sticky:hover, a.sticky:focus, button.sticky:hover, button.sticky:focus { background-color: rgba(var(--action-0),var(--op-6)); color: var(--action-contrast); } .main-actions .buttons button:disabled, .main-actions .buttons button:disabled:hover, .main-actions .buttons button:disabled:focus, button.sticky:disabled, button.sticky:disabled:hover, button.sticky:disabled:focus { opacity: .5; background-color: rgba(var(--base),var(--op-3)); color: rgb(var(--contrast)); } .qtoggle { left: 0; transition: left var(--trans-base), width var(--trans-base), border var(--trans-base), var(--trans-color); } .main .m-actions .refresh { width: var(--btn); border-radius: 0; background-color: rgb(var(--base-50)); color: rgb(var(--contrast)); } .main .m-actions .refresh:hover, .main .m-actions .refresh:focus { background-color: rgb(var(--action-0)); color: var(--action-contrast); } .main .refresh .indicator { background-color: rgba(var(--base), var(--op-3)); top: 0; right: 0; height: 1.1em; width: 1.1em; } .refresh .countdown:not(.counting) { display: none; } .main h2 { margin: .5em 0; font-size: var(--txt-medium); } #back-to-top { min-height: var(--chip); bottom: -3rem; right: 0; transition: bottom var(--trans-base); } body:has(.main-actions) #back-to-top { right: calc(var(--btn_) + .5rem); } .scroll-up #back-to-top { bottom: 0; } body:has(.fixed.bottom).scroll-up #back-to-top { bottom: var(--btn); } body:has(.on-this-page).scroll-up.scroll-up #back-to-top { bottom: calc(var(--btn) + var(--chip_)); } /****************************************************************** ACCESSIBILITY ******************************************************************/ .screen-reader-text { border: 0; clip: rect(1px, 1px, 1px, 1px); clip-path: inset(50%); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute !important; width: 1px; word-wrap: normal !important; } input[type=checkbox]:focus + label, input[type=checkbox]:focus-visible + label, input[type=radio]:focus + label, input[type=radio]:focus-visible + label, input:focus, input:focus-within { outline: 2px solid rgb(var(--action-0)) !important; outline-offset: 2px !important; box-shadow: 0 0 0 4px rgba(var(--action-0), var(--op-3))!important; } [aria-busy="true"] { cursor: progress; } [aria-disabled="true"], [disabled] { cursor: not-allowed; opacity: .7; } [type=checkbox][hidden] + label, [type=radio][hidden] + label, .btn[hidden] + label { display: none!important; } /************************************************************** FORM ELEMENTS **************************************************************/ label { display: inline-flex; align-items: center; gap: .5em; } [type=radio], [type=checkbox] { position: absolute; opacity: 0; left: var(--offScreen); } [type=radio] + label, [type=checkbox] + label { cursor: pointer; } .field:is(.radio,.checkbox) fieldset { display: grid; grid-template-columns: repeat(2, 1fr); gap: .5rem; } @media(min-width: 768px) { .field:is(.radio,.checkbox) fieldset { grid-template-columns: repeat(3, 1fr); } } .field:is(.radio,.checkbox,.true-false) label { position: relative; top: unset; left: unset; padding: 0 0 0 var(--chip); display: inline-flex; border: 1px solid transparent; font-weight: var(--fw-b); font-size: var(--txt-medium); } [type=radio] + label:hover, [type=radio]:focus + label, [type=checkbox] + label:hover, [type=checkbox]:focus + label { color: rgb(var(--action-0)); } [type=radio] + label::before, [type=radio] + label::after, [type=checkbox] + label::before, [type=checkbox] + label::after { content: ''; position: absolute; z-index: var(--z-2); } [type=checkbox] + label::before, [type=radio] + label::before { z-index: var(--z-1); } [type=checkbox] + label::after { left: .666em; top: .125em; transform: rotate(45deg); width: .25em; height: .75em; border: solid var(--action-contrast); border-width: 0 2px 2px 0; display: none; } [type=checkbox] + label::before, [type=radio] + label::before { display: block; top: .3em; left: .3em; width: .75rem; height: .75rem; border: 2px solid rgb(var(--contrast-200)); background-color: transparent; border-radius: var(--radius); } [type=radio] + label::before { border-radius: 50%; } [type=checkbox]:checked + label::before { background-color: rgb(var(--action-0)); border-color: rgb(var(--base-50)); } [type=checkbox]:checked + label::after { display: block; } [type=radio]:checked + label::before { background-color: rgb(var(--action-0)); box-shadow: rgba(var(--base), var(--op-45)) var(--shdw-inset); } /** Button checkboxes and radios **/ input.btn + label::before, input.btn + label::after { display: none; } textarea, input:is([type=date], [type=number], [type=text], [type=url], [type=email], [type=tel], [type=password], [type=search], [type=datetime-local], [type=time]) { font-family: var(--body); font-size: var(--txt-medium); color: rgb(var(--contrast)); padding: var(--p-y) var(--p-x); border-radius: var(--radius); background-color: rgb(var(--base)); outline: 0; border: 1px solid rgb(var(--base-100)); border-bottom: 2px solid rgb(var(--contrast-200)); width: 100%; max-width: 100%; margin: 0 4px; } textarea:focus, input:is([type=date], [type=number], [type=text], [type=url], [type=email], [type=tel], [type=password], [type=search], [type=datetime-local], [type=time]):focus { outline: rgb(var(--action-50)); background-color: rgb(var(--base-100)); color: rgb(var(--contrast)); } textarea::placeholder, input::placeholder { font-family: var(--body); color: rgb(var(--base-200)); } .field > label { position: relative; z-index: var(--z-1); display:inline-block; top: .75em; left: 1em; padding: 0 .5em; background-color:rgb(var(--base)); font-size:var(--txt-small); font-weight: var(--fw-b-light); text-transform:uppercase; border: 1px solid transparent; } .field.selector > label { top: 2.25em; } .field.selector .filter-toggle { width: var(--chipchip); min-height: var(--chipchip); padding: 0; } .field:not(.radio):not(.checkbox):not(.true-false):not(.taglist):focus-within > label { background-color:rgb(var(--action-0)); color: var(--action-contrast); border-radius: 4px; } .field.taglist, .field.taglist .field { border: none; } .field li.btn { min-height: var(--chip); } /****************************************************************** SELECT ******************************************************************/ select { background: rgb(var(--base)); border: 2px solid rgb(var(--base-100)); border-radius: var(--radius); color: rgb(var(--contrast)); cursor: pointer; font-family: var(--body); font-size: var(--txt-small); padding: var(--sp1); width: 100%; } select:disabled { background-color: rgb(var(--base-50)); border-color: rgb(var(--base-100)); color: rgb(var(--base-200)); cursor: not-allowed; } select option { background: rgb(var(--base)); color: rgb(var(--contrast)); padding: var(--sp1); } select option:hover, select option:focus, select option:active, select option:checked { background: rgb(var(--action-0)); color: rgb(var(--base)); box-shadow: 0 0 0 100px rgb(var(--action-0)) inset; } select option:checked { background: rgb(var(--action-0)) linear-gradient(0deg, rgb(var(--action-0)) 0%, rgb(var(--action-0)) 100%); color: rgb(var(--base)); } select:hover { border-color: rgb(var(--action-0)); } select:focus { border-color: rgb(var(--action-0)); } /****************************************************************** SEARCH & SPECIAL INPUTS ******************************************************************/ input[type=search]:focus + .clear-search { opacity: 1; cursor: pointer; } .search-container .clear-search { opacity: 0; cursor: default; max-width: 0; padding: 0; flex-shrink: 0; transition: width var(--trans-base), flex-shrink var(--trans-base); } .search-container [type="search"]:focus + .clear-search { max-width: unset; padding: .25rem 1rem; flex-shrink: unset; } .search-container.open.open [hidden] { display: block!important; } .search-container .icon.search { padding: 4px 8px; color: rgb(var(--contrast-200)); --w: 3rem; } input[type="search"]::-moz-search-clear-button, input[type="search"]::-ms-clear, input[type="search"]::-ms-reveal, input[type="search"]::search-cancel-button { -webkit-appearance: none; -moz-appearance: none; appearance: none; display: none; visibility: hidden; } input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-results-button, input[type="search"]::-webkit-search-results-decoration { -webkit-appearance:none; } input[type=url] { background: var(--icon); background-position: .5em; background-size: 1em; background-repeat: no-repeat; padding-left: 2em; } /************************************************** TABS **************************************************/ .tab-content[hidden] { display: block!important; transform: scaleY(0); max-height: 0; overflow: hidden; } .tab-content[hidden]:focus-within { transform: scaleY(1); max-height: max-content; } /************************************************** CARD **************************************************/ .item-grid.stats { margin: 1rem 0; } .card { background-color: rgb(var(--base-100)); border-radius: var(--radius); box-shadow: rgba(var(--base), var(--op-45)) var(--shdw); aspect-ratio: 3/2; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; } .card h4 { margin: 0; text-transform: uppercase; } .stat-number { font-family: var(--heading); font-weight: var(--fw-h-bold); color: rgb(var(--action-0)); font-size: var(--txt-xx-large); } /************************************************** PROGRESS **************************************************/ .progress { width: 100%; } .progress .bar { height: 6px; display: block; border-radius: 6px; overflow: hidden; background: rgb(var(--base-200)); position: relative; } .progress .fill { height: 100%; background: rgb(var(--action-0)); border-radius: 6px; width: 0; transition: width .3s ease; } .completed .fill { background: rgb(var(--action-200)); } .progress .details { margin-top: 5px; font-size: var(--txt-x-small); color: rgb(var(--contrast)); text-align: center; padding: .25rem 0; } .progress .details:empty { display: none; } .queued .fill::after, .pending .fill::after, .processing .fill::after, .uploading .fill::after { --delay: 0s; content: ''; position: absolute; top: 0; left: -50%; width: 30%; height: 100%; background: linear-gradient( 90deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, .225) 50%, rgba(255, 255, 255, 0) 100% ); animation: shimmer 2.5s infinite linear var(--delay); } /************************************************************** DETAILS **************************************************************/ details { padding: .25rem 0; border-top: 1px solid rgb(var(--base-200)); border-bottom: 1px solid rgb(var(--base-200)); } details[open] { background-color: rgb(var(--base-50)); } details summary { list-style: none; text-transform: uppercase; cursor: pointer; border: 0; position: relative; padding: .5rem 2.5rem .5rem .5rem; gap: .5rem; } details summary:hover { background-color: rgb(var(--base-100)); border-color: rgb(var(--base-100)); color: rgb(var(--contrast)); } details[open] > summary { background-color: rgb(var(--base-50)); } details summary::after { content: ''; position: absolute; right: .5rem; top: .5rem; background-color: rgb(var(--contrast-100)); -webkit-mask-repeat: no-repeat; -webkit-mask-size: contain; -webkit-mask-image: var(--icon); mask-image: var(--icon); mask-repeat: no-repeat; mask-size: contain; width: 1.25rem; height: 1.25rem; margin-left: auto; transition: var(--trans-color), var(--trans-transform); } details summary:hover::after { background-color: rgb(var(--action-0)); } details[open]:not(.all-filters) > summary::after { background-color: rgb(var(--contrast)); transform: rotate(-540deg); transition: background-color var(--trans-base); transition-property: background-color, transform; } details::details-content { opacity: 0; block-size: 0; overflow-y: clip; transition: content-visibility var(--trans-t) allow-discrete, opacity var(--trans-t), block-size var(--trans-t); } details[open]::details-content { opacity: 1; block-size: auto; } @media (prefers-reduced-motion: no-preference){ details { interpolate-size: allow-keywords; } } /******************************************************** CODE ********************************************************/ code { width: 100%; margin: .5rem; padding: .5rem; user-select: all; text-align: center; border-radius: 4px; background-color: rgb(var(--base-200)); } /******************************************************** OVERLAYS ********************************************************/ dialog[open], aside.expanded { background-color: rgb(var(--base)); box-shadow: rgba(var(--base),var(--op-45)) var(--shdw); z-index: var(--z-5); } dialog::backdrop { backdrop-filter: blur(5px); background-color: rgba(var(--base),var(--op-4)); } dialog[open], aside.main { border-radius: var(--radius-outer); overflow: hidden; } /** DIALOG **/ dialog[open] { z-index: var(--z-10); --padding: 0; top: 5vh; width: min(500px, 95vw); height: fit-content; max-height: 90vh; padding: var(--padding); background-color: rgb(var(--base-50)); color: rgb(var(--contrast)); border: 1px solid rgb(var(--base-200)); } dialog:is(.create,.edit,.bulkEdit)[open] { width: 98vw; max-height: 98vh; top: 1vh; } dialog > .wrap { max-height: var(--maxHeight); overflow: hidden auto; margin: 0 0 0 1.5rem; padding-right: 1.5rem; padding-bottom: var(--btn); width: calc(100% - 1.5rem); } dialog label { font-weight: normal; } dialog h2, dialog h3 { margin: 0 0 .5rem 0; font-size: var(--txt-large); } dialog:has(.m-actions) { padding-bottom: var(--btn); } .m-actions { --w: 1.15em; --justify: flex-end; --wrap: nowrap; --gap: 0; position: absolute; bottom: 0; right: 0; left: 0; height: var(--btn); width: 100%; z-index: var(--z-6); background-color: rgb(var(--action-100)); box-shadow: rgba(var(--base),var(--op-45)) var(--shdw-up); } .m-actions button { --wrap: nowrap; box-shadow: none; width: 100%; background-color: rgb(var(--action-0)); color: var(--action-contrast); --gap: .75rem; font-size: var(--txt-x-small); border-radius: 0; height: var(--chipchip); } .m-actions button:hover, .m-actions button:focus { background-color: rgb(var(--base)); color: rgb(var(--contrast)); } .m-actions button:first-of-type { border-bottom-left-radius: 1rem; } .m-actions button:last-of-type { border-bottom-right-radius: 1rem; } dialog ul { list-style: none; } dialog .search-container { padding-top: 1rem; width: 100%; gap: .5rem; } /** GALLERY **/ img[data-gallery] { cursor: pointer; } dialog.gallery[open] { --max: calc(100% - 2rem); inset: 1rem; margin: 0; border: none; width: 100%; height: 100%; max-height: var(--max); max-width: var(--max); border-radius: 0; /*background-color: rgba(var(--base), var(--op-6));*/ background-color: transparent; } dialog.gallery > .wrap { --wrap: nowrap; position: relative; overflow: hidden; max-height: none; margin: 0; padding: 0; height: 100%; width: 100%; inset: 0; } .gallery .hint { position: absolute; top: 1rem; left: 50%; transform: translateX(-50%); letter-spacing: .12em; pointer-events: none; z-index: 2; animation: hint-fade 3s ease forwards; } @keyframes hint-fade { 0% { opacity: 1; } 60% { opacity: 1; } 100% { opacity: 0; } } .gallery .controls { --wrap: nowrap; --align: flex-end; --justify: space-between; --gap: 0; position: absolute; inset: 0; padding: 1rem; z-index: 3; pointer-events: none; } .gallery .controls button { min-height: var(--chipchip); pointer-events: all; background: rgba(var(--base), var(--op-45)); border: 1px solid rgba(var(--contrast), var(--op-1)); color: rgba(var(--contrast), var(--op-5)); } .gallery .controls button:hover, .gallery .controls button:focus { background: rgba(var(--base), var(--op-5)); color: rgb(var(--contrast)); } .gallery .controls .cancel { position: absolute; top: 1rem; right: 1rem; } dialog.gallery .cancel:focus, dialog.gallery .cancel:hover { background: rgba(var(--base),var(--op-4)); } dialog.gallery .content { position: relative; overflow: hidden; flex: 1; display: flex; } dialog.gallery .image-left, dialog.gallery .image-right { position: absolute; width: 0; height: 0; opacity: 0; pointer-events: none; left: var(--offScreen); } dialog.gallery .content .image { max-width: 100%; max-height: 100%; object-fit: contain; display: block; transform-origin: center center; will-change: transform; transition: transform 0.15s ease-out; touch-action: none; user-select: none; -webkit-user-drag: none; cursor: default; } .gallery .image[style*="scale(1)"], .gallery .image:not([style]) { cursor: default; } dialog.gallery details { position: absolute; width: 100%; max-width: none; bottom: 0; left: 0; right: 0; background: rgba(var(--base),var(--op-45)); color: rgb(var(--contrast)); border-radius: 4px; overflow: hidden; z-index: 3; } dialog.gallery details:has(.item-info:empty) { display: none; } dialog.gallery details summary { padding: 0.75rem 1rem; cursor: pointer; user-select: none; } dialog.gallery details[open] .item-info { padding: 0.75rem 1rem 1rem; font-size: var(--txt-x-small); } dialog.gallery .counter { position: absolute; bottom: 0; left: 50%; transform: translateX(-50%); background: rgba(var(--base),var(--op-4)); color: rgba(var(--contrast), var(--op-3)); padding: .4rem .8rem; border-radius: 3px; font-size: var(--txt-small); letter-spacing: .1em; z-index: 3; } dialog.gallery .favourite { position: absolute; top: 0; left: 0; z-index: 3; } dialog.gallery .image { opacity: 0; transition: opacity .2s ease, transform .15s ease-out; } dialog.gallery .image[src] { opacity: 1; } ul.gallery { display: flex; flex-wrap: wrap; margin: .2em; padding: 0; list-style-type: none; } ul.gallery::after { content: ''; display: block; flex-grow: 10; } ul.gallery li { flex-grow: 1; height: 40vh; margin: .2em; overflow: hidden; } ul.gallery figure { min-width: 100%; height: 100%; } ul.gallery figure.duotone img { mix-blend-mode: multiply; } @media (max-aspect-ratio: 1/1) and (max-width: 480px) { ul.gallery { flex-direction: row; } ul.gallery li { height: auto; width: 100%; } ul.gallery figure { width: 100%; max-height: 75vh; min-width: 0; } } @media (max-aspect-ratio: 1/1) { ul.gallery li { height: 30vh; } } @media (max-height: 480px) { ul.gallery li { height: 80vh; } } /*** POPUPS: notifications, cart, queue ***/ aside.main.main { --wrap: nowrap; --align: stretch; --dir: column; position: fixed; top: var(--btnbtn); bottom: var(--btn_); width: min(500px, calc(100vw - 2rem)); padding: 0 0 var(--btn); } aside.main.left { border-radius: 0 var(--radius-outer) var(--radius-outer) 0; left: var(--offScreen); transition: left var(--trans-base); } aside.main.left.expanded { left: 0; } aside.main.right { border-radius: var(--radius-outer) 0 0 var(--radius-outer); right: var(--offScreen); transition: right var(--trans-base); } aside.main.right.expanded { right: 0; } aside.main nav.tabs { --gap: 0; flex-shrink: 0; } aside.main > .wrap { max-height: 100%; overflow: hidden auto; } aside.main header { --w: 2em; background-color: rgb(var(--action-0)); color: var(--action-contrast); padding: 1rem; } .tab-content header { width: calc(100% + 2rem); left: -1rem; top: -1rem; position: relative; } .main header .icon { margin-right: 1em; } .main h3 { font-size: var(--txt-large); margin: .5rem 0; } aside.main nav.share { --dir: row; --align: center; margin: 0; border-bottom: 1px solid rgb(var(--base-200)); } nav.share ul, nav.share li, nav.share a { height: var(--chipchip); } nav.share a:hover { background-color: rgb(var(--action-0)); color: var(--action-contrast); } aside.main h4, aside.main .hint { text-align: center; } aside.main .tab-content { flex-shrink: 0; } aside.main .tab-content.active { flex: 1; overflow: hidden auto; padding: 1rem; } .main section { padding: 1rem; } .main section + section { border-top: 1px solid rgb(var(--base-200)); } .qtoggle .count, .indicator { position: absolute; top: -.5em; right: -.5em; width: .75em; height: .75em; border-radius: 50%; } .qtoggle .indicator { top: 0; right: 0; } .qtoggle .count { right:unset; left: .25rem; top: .25rem; font-size: var(--txt-small); } #queue.synced + .qtoggle .indicator { background-color: rgb(var(--success)); } #queue.pending + .qtoggle .indicator { background-color: rgb(var(--warning)); animation: pulse 2s infinite; } .refresh.fetching .icon, #queue.pending:not(.expanded) + .qtoggle .icon { background-color: rgb(var(--action-0)); animation: spin 1s var(--trans-fn) infinite; } .main.expanded + .qtoggle { width: calc(min(500px, calc(100vw - 2rem)) - var(--btn)); } .main-actions .buttons:has(.expanded) { width: calc(min(500px, calc(100vw - 2rem))); } .main.expanded + .qtoggle { left: var(--btn); border-bottom-right-radius: var(--radius-outer); } .main-actions .buttons:has(.expanded) { right: 0; } .main-actions button.expanded { border-bottom-left-radius: var(--radius-outer); width: 100%; } .buttons:has(.expanded) > button:not(.expanded) { display: none; } .main nav.filters { width: 100%; height: var(--chipchip); --justify: flex-start; --align: flex-end; } .main nav.filters li { overflow: visible; } .main .btn + label { min-height: var(--chip); min-width: var(--chip); overflow: visible; } .btn + label .indicator:not(:empty) { font-size: var(--txt-small); background-color: rgb(var(--base)); border: 1px solid rgb(var(--contrast)); width: 1.75em; height: 1.75em; padding: .3em; } .main > .header { border-bottom: 1px solid rgb(var(--base-200)); padding: 1rem 0; flex-shrink: 0; } .main .item-grid { flex: 1; overflow: hidden auto; overflow-anchor: none; padding: .5rem 2rem; --gap: .5rem; } .queue-actions { flex-shrink: 0; border-top: 1px solid rgb(var(--base-200)); } .queue-actions button { width: 100%; } .main .item { background-color: rgb(var(--base-50)); padding: 15px; border-radius: var(--radius); box-shadow: var(--shdw-none); font-size: var(--txt-x-small); } .main .item .header { position: relative; padding: .25rem 0; } .main .item .actions { width: 100%; } .main .item button { min-height: var(--chip); font-size: var(--txt-x-small); --w: var(--txt-x-small); } .main .item .time { padding: .5rem 0; font-size: var(--txt-small); border: 1px solid rgb(var(--base-200)); border-width: 1px 0; margin: .25rem 0; } .main .item .progress .details { text-align: right; font-size: var(--txt-small); width: 100%; } /*** MAIN ACTIONS ***/ .main-actions .buttons { transition: width var(--trans-base), right var(--trans-base); right: .5rem; width: var(--btn); margin: 0; } .attn { animation: pulse-color 5s infinite; animation-delay: 1s; } .attn.expanded { animation: none; } /******************************************************** CALLOUTS ********************************************************/ .callalt.callalt, .callout.callout { padding: 2rem; margin: 0; max-width: none; grid-column: full; } @media (min-width: 768px){ .callout.callout { padding: 2rem 20vw; } } .callout.callout { background-color: rgb(var(--action-0)); color: var(--action-contrast); } .callalt.callalt { background-color: rgb(var(--secondary-0)); color: var(--secondary-contrast); } .callalt :is(h1, h2, h3, h4, h5, h6), .callout :is(h1, h2, h3, h4, h5, h6) { font-family: var(--body); font-weight: var(--fw-b-bold); margin: 1rem 0 0; width: 100%; } .callout a { background-color: var(--action-contrast); padding: 0 .125rem; border-radius: 4px; } /******************************************************** WP BLOCKS ********************************************************/ /** MEDIA TEXT **/ .media-text > * { flex: 1; } /** COVER **/ .cover { --color: rgba(var(--action-0), var(--op-5)); position: relative; overflow: hidden; min-height: 60vh; padding: var(--btn); } .cover:not(.duotone)::before { content: ''; /*z-index: var(--coverIndex);*/ background-color: var(--dark-0); /*mix-blend-mode: var(--coverBlend);*/ /*background-position: center;*/ /*background-repeat: no-repeat;*/ /*background-size: cover;*/ } .cover .overlay { background-color: var(--dark-0); } .overlay.op-1 { opacity: var(--op-1); } .overlay.op-2 { opacity: var(--op-2); } .overlay.op-3 { opacity: var(--op-3); } .overlay.op-4 { opacity: var(--op-4); } .overlay.op-45 { opacity: var(--op-45); } .overlay.op-5 { opacity: var(--op-5); } .overlay.op-6 { opacity: var(--op-6); } .cover:has(.overlay)::before { display: none; } .cover .overlay, .cover:not(.duotone)::before, .cover > video, .cover > img { position: absolute; inset: 0; width: 100%; max-width: none!important; height: 100%; margin: 0; } .cover > img, .cover > video { mix-blend-mode: luminosity; max-width: none!important; width: 100%!important; } .cover .overlay, .cover:not(.duotone)::before { z-index: 2; background-color: var(--color); mix-blend-mode: color; } .cover .content { z-index: 5; position: relative; overflow: hidden auto; width: max-content; height: max-content; max-width:100%; max-height: 100%; } .cover > img { /*z-index: 1;*/ /*opacity: .5;*/ /*mix-blend-mode: luminosity;*/ object-fit: cover; } @media (min-width: 768px) { .cover > img { /*opacity: .33;*/ } } /** IMAGE **/ figure { overflow: hidden; position: relative; } figure:is(.op-1,.op-2,.op-3,.op-4,.op-5,.op-6,.op-45)::before { position: absolute; inset: 0; pointer-events: none; content: ''; } figure.op-1::before { opacity: var(--op-1); } figure.op-2::before { opacity: var(--op-2); } figure.op-3::before { opacity: var(--op-3); } figure.op-45::before { opacity: var(--op-45); } figure.op-4::before { opacity: var(--op-4); } figure.op-5::before { opacity: var(--op-5); } figure.op-6::before { opacity: var(--op-6); } figure.action-0::before { background-color: rgb(var(--action-0)); } figure.action-50::before { background-color: rgb(var(--action-50)); } figure.action-100::before { background-color: rgb(var(--action-100)); } figure.action-200::before { background-color: rgb(var(--action-200)); } figure.secondary-0::before { background-color: rgb(var(--secondary-0)); } figure.secondary-50::before { background-color: rgb(var(--secondary-50)); } figure.secondary-100::before { background-color: rgb(var(--secondary-100)); } figure.secondary-200::before { background-color: rgb(var(--secondary-200)); } figure.base::before { background-color: rgb(var(--base)); } figure.base-50::before { background-color: rgb(var(--base-50)); } figure.base-100::before { background-color: rgb(var(--base-100)); } figure.base-200::before { background-color: rgb(var(--base-200)); } figure.contrast::before { background-color: rgb(var(--contrast)); } figure.contrast-50::before { background-color: rgb(var(--contrast-50)); } figure.contrast-100::before { background-color: rgb(var(--contrast-100)); } figure.contrast-200::before { background-color: rgb(var(--contrast-200)); } .bg-fixed { background-attachment: fixed; } .bg-repeat.bg-repeat { background-repeat: repeat; background-size: 33vw; } [data-bg-img] { background-size: cover; background-repeat: no-repeat; } /** BLOCKQUOTE **/ blockquote { margin-left: 10vw; position: relative; padding: var(--btn); } blockquote .icon { position: absolute; top: var(--btn); left: calc((10vw + var(--btn)) * -1); --w: 10vw; opacity: var(--op-1); } blockquote cite { padding: 15px 0 0 12px; margin: 0 0 0 150px; z-index: 1; } blockquote.pull { background-color: unset; border-radius: 0; margin: 4rem auto; padding: 3rem; box-shadow: rgba(var(--base),var(--op-45)) var(--shdw-down), rgba(var(--base),var(--op-45)) var(--shdw-up);; } blockquote.pull cite { margin: 0; } /** QUERY **/ .loop { padding: var(--sp4) var(--sp1); } .loop :is(h1,h2,h3,h4,h5,h6) { margin: .5em 0; } .loop :is(h1,h2,h3,h4,h5,h6):has(+ time) { margin-bottom: 0; } .loop :is(h1,h2,h3,h4,h5,h6) + time { font-size: var(--txt-x-small); margin-top: 0; } .loop li { list-style: none; } .loop p:has(.read-more) { text-align: right; } .loop li > figure { float: left; margin-right: var(--chip_); margin-top: 0; max-width: 30%; aspect-ratio: 1; } .no-results p, .no-results { display: flex; justify-content: center; align-items: center; } /** TODO: LIST OVERRIDES **/ /********************************************************* DIRECTORY *********************************************************/ .directory-list > ul { max-width: none; } .directory-list .image { display: flex; flex-wrap: nowrap; align-items: center; } .directory-list img { width: 70px; } .directory-list h3 { margin: 0; text-align: center; font-weight: var(--fw-h-bold); position: sticky; font-size: var(--txt-enormous); width: 100%; top: var(--btn); left: 0; color: rgb(var(--base)); text-shadow: rgb(var(--base-200)) 1px 1px 0; user-select: none; } .directory-list >ul > li { padding: 2rem; align-items: flex-start; } .directory-list >ul > li:nth-of-type(even) { background-color: rgb(var(--base-100)); } /** The letter's list **/ .directory-list ul ul { width: 100%; } .directory-list ul ul li { padding: .35rem .5rem; } .directory-list ul ul li:nth-of-type(even) { background-color: rgb(var(--base-100)); } .directory-list ul li:nth-of-type(even) ul li:nth-of-type(even) { background-color: rgb(var(--base-50)); } @media (min-width: 768px) { .directory-list h3 { width: 20vw; } .directory-list ul ul { min-height: var(--txt-enormous); } .directory-list >ul > li { padding: 2rem 10vw; } } /****************************************************************** LOADING ******************************************************************/ dialog.loading { opacity: 0; } dialog.loading[open] { opacity: 1; width: 100vw; height: 100vh; display: flex; max-width: 100%; max-height: 100%; border-radius: 0; border: none; background-color: transparent; box-shadow: none; --w: 3em; justify-content: center; align-items: center; inset: 0; } dialog.loading[open]@starting-style { opacity: 0; } dialog.loading[open] > .col { height: fit-content; width: min(400px, 60vw); border-radius: var(--radius-outer); background-color: rgba(var(--base),var(--op-4)); padding: 2rem; box-shadow: rgba(var(--base),var(--op-45)) var(--shdw); position: relative; } dialog.loading[open] .spinner { position: absolute; top: 1rem; width: 5rem; height: 5rem; border-width: 0; border-top-width: 4px; animation: spin 1s var(--trans-fn) infinite; } .loading[open] i.icon { background-color: rgb(var(--action-0)); } dialog.loading[open] i.icon { animation: dance 2s ease-in-out infinite; } dialog.loading[open] h3 { color: rgb(var(--contrast)); margin: 2rem 1rem auto !important; font-size: var(--txt-large); width: -moz-fit-content; width: fit-content; } dialog.loading[open] p { margin: .5rem auto; } dialog.loading[open]::after { animation: shimmer 3s ease-in-out infinite; background: linear-gradient(90deg, var(--shimmer)); content: ""; inset: 0; position: absolute; z-index: -1; } .spinner { width: 12px; height: 12px; border: 2px solid transparent; border-top: 2px solid rgb(var(--action-50)); border-radius: 50%; animation: spin 1s var(--trans-fn) infinite; } /** ANIMATIONS **/ @keyframes shimmer { 0% { left: -50%; } 50% { left: 150%; } 100% { left: -50%; } } @keyframes pulse-color { 0% { box-shadow: 0 0 0 0 rgba(var(--action-0), .4); } 30% { box-shadow: 0 0 0 .75rem rgba(var(--action-0), 0); } 100% { box-shadow: 0 0 0 0 rgba(var(--action-0), 0); } } @keyframes fadeIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeOut { from { opacity: 1; transform: translateY(0); } to { opacity: 0; transform: translateY(20px); } } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } @keyframes dance { 0%, 100% { transform: rotate(-5deg) scale(1); } 50% { transform: rotate(5deg) scale(1.1); } } /*.group {*/ /* background-color: rgb(var(--base));*/ /* margin: 1rem 0;*/ /*}*/