/*!
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);
--filterNone: grayscale(0) sepia(0);
--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;
}
a > img,
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: clip;
}
@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: rgb(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: rgb(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: rgb(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; }
.abs.top { top: 0; right: 0; left: 0; }
.top-right { top: 0; right: 0; }
.top-left { top: 0; left: 0; }
.abs.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: rgb(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: rgb(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: rgb(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: rgb(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_));
}
body:has(.fixed.bottom):has(nav.index.on-this-page).scroll-up.scroll-up #back-to-top {
bottom: calc(var(--btn) + var(--chipchip));
}
button[data-action=refresh],
button.clear-filters {
width: max-content;
min-height: var(--chip_);
--w: var(--txt-small);
padding: .25rem .5rem;
}
/******************************************************************
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;
position: relative;
padding-left: 1.5rem;
}
.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].btn + label:hover,
[type=radio].btn:checked + label:hover {
color: rgb(var(--action-contrast));
}
[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 rgb(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: rgb(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);
}
aside.expanded {
margin: 0!important;
}
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;
margin: auto!important;
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.wrap {
max-height: var(--maxHeight);
overflow: hidden auto;
flex-wrap: nowrap;
justify-content: flex-start;
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: rgb(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 li {
list-style: none;
padding: 0;
}
dialog .search-container {
padding-top: 1rem;
width: 100%;
gap: .5rem;
}
dialog header {
width: 100%;
text-align: center;
font-size: var(--txt-x-medium);
height: var(--chipchip);
}
dialog header h2 {
margin: 0;
}
/** SELECTOR **/
.selected-items {
width: 100%;
padding: .5rem;
border-radius: var(--radius);
background-color: rgb(var(--base));
--justify: flex-start;
--gap: .5rem;
margin-bottom: .5rem;
}
.selected-items button {
width: max-content;
padding: .125rem .5rem;
font-size: var(--txt-x-small);
min-height: var(--chip_);
}
.selected-items button .icon-x {
--w: var(--txt-small);
align-self: flex-start;
}
.selected-items.selected-items:empty {
padding: 0;
background-color: transparent;
margin: 0;
}
.selected-item.selected-item {
padding: .25rem .5rem;
margin: .125em;
background-color: rgb(var(--base-100));
border-radius: .25rem;
font-size: var(--txt-medium);
border: 1px solid rgb(var(--base-200));
position: relative;
width: max-content;
}
.selected-item button {
min-height: 0;
height: var(--chip);
width: var(--chip);
padding: 0;
--w: var(--txt-small);
}
.clear-filters {
margin-left: auto;
border: 1px solid var(--base-200);
}
#jvb-selector .message {
width: 100%;
text-align: center;
}
#jvb-selector .items-wrap {
width: 100%;
padding: 1rem 0;
border: 1px solid rgb(var(--base-200));
border-width: 1px 0;
}
#jvb-selector .items-container {
display: grid;
grid-template-columns: repeat(2, 1fr);
margin: 0;
}
.autocomplete-dropdown {
width: 100%;
background-color: var(--base-100);
padding: .5rem;
box-shadow: rgba(var(--base), var(--op-45)) var(--shdw);
}
li.autocomplete {
list-style: none;
display: inline-flex;
margin: .25rem;
min-height: var(--chip);
}
/** 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!important;
padding: 0!important;
max-width: 100vw;
}
ul.gallery::after {
content: '';
display: block;
flex-grow: 10;
}
ul.gallery li {
flex-grow: 1;
list-style: none;
height: 40vh;
margin: .2em;
overflow: hidden;
padding: 0;
max-width:49%;
}
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;
}
}
ul.gallery.cut {
--gap: var(--txt-small);
display: grid;
max-width: var(--narrow);
grid: auto-flow 1fr/repeat(3, 1fr);
gap: var(--gap);
}
ul.gallery.cut img {
filter: var(--filterNone);
}
ul.gallery.cut:hover img {
filter: var(--filter);
}
ul.gallery.cut:hover img:hover {
filter: var(--filterNone);
}
ul.gallery.cut li:nth-of-type(4n +2) {
grid-area: 1/2/span 2/span 2;
clip-path: polygon(0 0,100% 0,100% 100%,calc(50% + var(--g)/4) 100%,0 calc(50% - var(--g)/4));
}
ul.gallery.cut li:nth-of-type(4n +3) {
grid-area: 2/1/span 2/span 2;
clip-path: polygon(0 0,calc(50% - var(--g)/4) 0,100% calc(50% + var(--g)/4),100% 100%,0 100%);
}
/*** 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: rgb(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: rgb(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: rgb(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: rgb(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-quotes-fi {
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 **/
ul.loop {
max-width: none;
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;
}
.loop.scroll {
display: flex;
flex-wrap: nowrap;
overflow-x: auto;
touch-action: pan-x;
margin:0!important;
}
a:has(img) {
display:block;
padding: .25rem;
}
.no-results p,
.no-results {
display: flex;
justify-content: center;
align-items: center;
}
/** TODO: LIST OVERRIDES **/
/*********************************************************
DIRECTORY
*********************************************************/
.directory-list > ul {
max-width: none;
margin-left: 0!important;
}
.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;*/
/*}*/