/*!
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: 7.0
Version: 1.5.95
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: #fafafa;
--light-50: #fcfbfb;
--light-100: #f1eded;
--light-200: #e6dfdf;
--light-rgb: 250,250,250;
--dark-0: #201313;
--dark-50: #261717;
--dark-100: #2d1b1b;
--dark-200: #331e1e;
--dark-rgb: 16,4,4;
--action-0: #B7332E;
--action-50: #a32d29;
--action-100: #8e2824;
--action-200: #7a221f;
--action-contrast: var(--light-0);
--action-0: 183,51,46;
--secondary-0: #E8A737;
--secondary-50: #e59d20;
--secondary-100: #d48f18;
--secondary-200: #bd7f16;
--secondary-contrast: var(--light-0);
--secondary-0: 232,167,55;
--success: #22C55E;
--successBack: #d4edda;
--successText:#155724;
--warning: #E8A737;
--error: #EF4444;
--errorBack: #f8d7da;
--errorText: #721c24;
--base: var(--light-0);
--base-50: var(--light-50);
--base-100: var(--light-100);
--base-200: var(--light-200);
--base: var(--light-rgb);
--contrast: var(--dark-0);
--contrast-50: var(--dark-50);
--contrast-100: var(--dark-100);
--contrast-200: var(--dark-200);
--contrast: var(--dark-rgb);
--shimmer: rgba(var(--dark-rgb),0) 0%,
rgba(var(--dark-rgb),.05) 50%,
rgba(var(--dark-rgb),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: 1rem;
--p-x: 1rem;
/*****************************
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: var(--base-100);
--sb-thumb: var(--action-0);
--sb-thumb-hover: var(--action-50);
--sb-thumb-border: 2px solid 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: #cb3933;
--action-100: #d14c47;
--action-200: #d6605c;
--secondary-50: #ebb14e;
--secondary-100: #edbb65;
--secondary-200: #f0c57c;
--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: #155724;
--successText:#d4edda;
--errorBack: #721c24;
--errorText: #f8d7da;
--shimmer: rgba(var(--c),0) 0%,
rgba(var(--c),.05) 50%,
rgba(var(--c),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%;
}
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 {
border-style: solid;
border-width: 1px 0 0;
color: inherit;
height: 0;
overflow: visible;
margin-block: 2.5rem;
}
: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: var(--base-50);
color: 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 {
display: grid;
grid-template-columns:
[full-start] minmax(1rem, 1fr)
[wide-start] minmax(0, calc((100% - var(--content)) / 2))
[wider-start] minmax(0, calc((var(--wide) - var(--wider)) / 2))
[content-start] minmax(0, calc((var(--wider) - var(--content)) / 2))
[narrow-start] min(100% - 2rem, var(--narrow)) [narrow-end]
minmax(0, calc((var(--content) - var(--narrow)) / 2)) [content-end]
minmax(0, calc((var(--wider) - var(--content)) / 2)) [wider-end]
minmax(0, calc((var(--wide) - var(--wider)) / 2)) [wide-end]
minmax(0, calc((100% - var(--content)) / 2))
minmax(1rem, 1fr) [full-end];
min-height: var(--maxHeight);
}
main > * {
grid-column: content;
}
main > section {
padding: 3rem 0;
grid-column: full;
}
main > section > * {
width: 100%;
max-width: var(--content);
}
/* Nested items can use any width */
main .align-narrow {
grid-column: narrow;
}
main .align-content {
grid-column: content;
}
main .align-wider {
grid-column: wider;
}
main .align-wide {
grid-column: wide;
}
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: 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;
}
.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: var(--base-200);
overflow: hidden;
}
.scroll-progress .bar {
width: 100%;
height: 1px;
transform-origin: left center;
transform: scaleX(0);
background: var(--action-0);
}
aside.pre-header,
aside.sub-header,
aside.pre-footer,
aside.sub-footer {
height: var(--chip_);
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 1rem;
font-size: var(--txt-x-small);
background-color:var(--base-50);
z-index: var(--z-7);
}
.pre-header p {
width: max-content;
}
.pre-header {
position: sticky;
top: -2rem;
transition: top var(--trans-base);
}
.scroll-up .pre-header {
top: 0;
}
.scroll-up .pre-header ~ header {
top: calc(var(--chip_) - 2px);
}
/*.pre-header.stuck ~ #breadcrumbs {*/
/* margin-top: var(--chip_);*/
/*}*/
footer {
padding: 1rem;
background-color: var(--base-200);
color: 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 var(--action-200);
background-color: var(--base);
}
/*************************************************************
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%;
}
: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: 600;
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;
}
:is(h1, h2, h3, h4, h5, h6).inline + .term-list {
display: inline-flex;
margin: .5rem 0;
}
h1 {
font-size: var(--txt-xxx-large);
font-weight: var(--fw-h);
line-height: 1;
margin: 0 auto .25em;
}
h1:first-of-type {
margin-top: 10vh;
}
h1 small {
display: block;
font-size: var(--txt-x-small);
font-weight: var(--fw-b);
line-height: 1;
margin-bottom: .75em;
font-family: var(--body);
}
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;
}
.hint {
line-height: 1.2;
font-style: italic;
font-size: var(--txt-small);
}
/*main > * :is(h1, h2, h3, h4, h5, h6, p) {*/
/* width: 100%;*/
/*}*/
main > * p {
margin: .5rem 0;
}
a {
color: var(--action-0);
border-radius: 4px;
padding: .125rem;
}
ul a {
display: inline-flex;
}
a:visited {
color: var(--action-50);
}
a:hover {
color: var(--contrast-50);
text-decoration: none;
}
p a:hover,
li a:hover,
:is(h1, h2, h3, h4, h5, h6) a:hover {
color: var(--action-contrast);
background-color: var(--action-0);
}
ol {
list-style-type:decimal;
}
.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); }
/**************************************************************
UTILITY CLASSES - SPACING
**************************************************************/
/** PADDING **/
.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); }
/**************************************************************
UTILITY CLASSES - TEXT & VISIBILITY
**************************************************************/
.align-center { text-align: center; }
.align-left { text-align: left; }
.align-right { text-align: right; }
*[hidden] {
display: none!important;
}
@media (max-width: 767px){
.hide-small {
display: none;
}
}
.width-50,
.width-25,
.width-75 {
width: 100%;
}
.w-full{
width: 100%;
}
@media (min-width: 768px){
.buttons li.width-50,
.width-50 {
width: calc(50% - .3em);
}
.width-25 {
width: calc(25% - .3em);
}
.width-75 {
width: calc(75% - .3em);
}
}
/******************************************************************
LAYOUT UTILITIES
******************************************************************/
.row,
.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;
}
.col { --dir: column; }
.row { --dir: row; }
.col.rev { --dir: column-reverse; }
.row.rev { --dir: row-reverse; }
.nowrap.nowrap { --wrap: nowrap; }
.nowrap.nowrap.stack-small { --wrap: wrap;}
@media (min-width: 768px) {
.nowrap.nowrap.stack-small { --wrap: nowrap;}
}
.col.start,
.row.a-start { --align: flex-start; }
.col.end,
.row.a-end { --align: flex-end; }
.col.a-start,
.row.start { --justify: flex-start; }
.col.a-end,
.row.end { --justify: flex-end; }
.col.btw,
.row.btw {
--justify: space-between;
width: 100%;
}
.col.even,
.row.even { --justify: space-evenly; }
/******************************************************************
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 & TOGGLE
******************************************************************/
.toggle-switch input {
opacity: 0;
width: 0;
height: 0;
position: absolute;
left: var(--offScreen);
}
.toggle-switch .slider {
position: relative;
width: 2rem;
height: 1rem;
background-color: var(--base-200);
border-radius: .75rem;
overflow: hidden;
display: flex;
justify-content: space-evenly;
align-items: center;
border: 4px solid transparent;
transition: var(--trans-t);
box-shadow: 0 0 .25rem 0 rgba(var(--contrast), .125) inset;
cursor: pointer;
margin: 5px;
}
.toggle-switch .slider::before {
content: '';
display: block;
width: 100%;
height: 100%;
position: absolute;
top:0;
left: 0;
background-color: var(--base);
transform: translateX(-1rem);
border-radius: .75rem;
transition: var(--trans-transform);
box-shadow: 0 0 .25rem 3px rgba(var(--contrast), .125);
}
.toggle-switch input:checked ~ .slider::before {
transform: translateX(1rem);
box-shadow: 0 0 .25rem 3px rgba(var(--base), .25);
}
.toggle-switch input:checked ~ .slider {
background-color: var(--action-0);
}
.toggle-switch input:active ~ .slider::before {
transform: translate(0);
}
#theme-switch {
z-index: 99;
margin: 0;
--wrap: nowrap;
--gap: 1rem;
}
#theme-switch .slider {
width: var(--chipchip);
height: var(--chip);
}
#theme-switch .slider::before {
transform: translateX(-1.5rem);
}
#theme-switch input:checked ~ .slider::before {
transform: translateX(1.5rem);
}
@media (max-width: 600px) {
#theme-switch {
left: 1rem;
}
.wp-site-blocks > header {
padding: 0!important;
}
}
/*********************************************************
GRIDS
*********************************************************/
.grid-view,
.item-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 10px;
}
.item-grid.stats {
grid-template-columns: repeat(2, 1fr);
}
@media (min-width: 768px){
.grid-view,
.item-grid {
--width: 250px;
grid-template-columns: repeat(auto-fill, minmax(var(--width), 1fr));
}
}
.grid-view .item,
.item-grid .item {
border-radius: var(--radius-outer);
display:flex;
justify-content: var(--justify);
align-items: var(--align);
flex-wrap: var(--wrap);
gap: var(--gap);
flex-direction: var(--dir);
filter: none;
position: relative;
}
.item-grid.list-view {
gap: 0;
}
.item-grid.list-view .item {
aspect-ratio: unset;
align-items: flex-start;
border-radius: 4px;
padding: 1rem 0;
}
.list-view .item:nth-of-type(even) {
background-color: var(--base);
}
.list-view .item-select {
display: flex;
align-items: center;
justify-content: center;
min-height: 18vh;
}
.list-view .item .col {
padding: 0 var(--chip_) 0 1rem;
}
.list-view .abs {
right:0;
top:0;
width:max-content;
--dir:column-reverse;
justify-content: flex-end;
}
.item.col {
--wrap: nowrap;
}
.votes,
.favourite {
position: absolute;
z-index: var(--z-1);
box-shadow: rgba(var(--base),var(--op-2)) var(--shdw);
background-color: rgba(var(--base),var(--op-2));
}
.favourite .icon-heart-fi,
.favourited .icon-heart {
display: none;
}
.favourited .icon-heart-fi,
.favourite .icon-heart {
display: block;
}
.votes {
bottom: 0;
right: 0;
}
.favourite {
top: 0;
left: 0;
}
.item-grid .item .images,
.item-grid .item .images a{
aspect-ratio: 1;
width: 100%;
height: 100%;
display: flex;
}
.item-grid button {
--height: max-content;
aspect-ratio: 1;
}
.grid-view img,
.item-grid img {
border-radius: var(--radius);
}
.item-grid.list-view {
display: flex;
flex-direction: column;
gap: 0;
}
.item-grid.list-view .item .col {
--gap: .5rem;
}
.item-grid.list-view img {
width: 20%;
}
@media (min-width: 768px) {
.item-grid,
.grid-view {
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
}
}
/******************************************************************
INTERACTIVE ELEMENTS - BASE
******************************************************************/
li.btn,
button,
[type=submit],
a.button,
.buttons a,
.btn + label {
--justify: center;
--align: center;
--dir: row;
width: fit-content;
text-transform: uppercase;
text-decoration: none;
text-align: center;
background-color: var(--base-100);
color: var(--contrast-50);
border: 1px solid 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;
justify-content: var(--justify);
align-items: var(--align);
gap: var(--gap);
flex-wrap: var(--wrap);
flex-direction: var(--dir);
position: relative;
box-shadow: rgba(var(--base),var(--op-6)) var(--shdw-inset);
}
[data-filter], .btn + label {
width: var(--chipchip);
height: var(--chipchip);
min-height: var(--chipchip);
}
select[data-filter] {
width: max-content;
height: auto;
min-height: 0;
}
ul.socials a {
background-color: var(--base-100);
color: var(--contrast-50);
border: 1px solid var(--base-200);
border-radius: var(--radius);
padding: .25rem 1rem;
cursor: pointer;
min-height: var(--btn);
display: inline-flex;
justify-content: center;
align-items: center;
box-shadow: rgba(var(--base),var(--op-6)) var(--shdw-inset);
}
/******************************************************************
INTERACTIVE ELEMENTS - STATES
******************************************************************/
li.btn:hover,
li.btn:focus,
button:hover,
button:focus,
[type=submit]:hover,
[type=submit]:focus,
a.button:hover,
a.button:focus,
ul.socials a:hover,
ul.socials a:focus,
.buttons a:hover,
.buttons a:focus,
.btn + label:hover,
.btn + label:focus {
background-color: var(--action-0);
color: var(--action-contrast);
box-shadow: var(--shdw-none);
}
button:disabled,
[type=submit]:disabled,
a.button:disabled,
ul.socials a:disabled,
.btn:disabled + label,
button:disabled:hover,
button:disabled:focus,
[type=submit]:disabled:hover,
[type=submit]:disabled:focus,
a.button:disabled:hover,
a.button:disabled:focus,
ul.socials a:disabled:hover,
.btn:disabled + label:hover {
opacity: .5;
cursor: not-allowed;
background-color: var(--base-200);
color: var(--contrast-200);
}
/******************************************************************
BUTTONS
******************************************************************/
.buttons {
--wrap: wrap;
--justify: flex-start;
margin: 1rem auto;
width: 100%;
padding: 0;
}
.buttons.fit {
width: fit-content;
margin: 1rem 2rem;
}
.buttons li {
--justify: stretch;
--align: stretch;
padding: 0;
list-style: none;
overflow:hidden;
width: 100%;
}
.list-none {
list-style: none;
}
@media (min-width: 768px){
.buttons {
max-width: var(--content);
margin: 3rem auto;
}
}
.buttons .outline a {
background-color: transparent;
color: var(--action-0);
border: 2px solid var(--action-0);
}
.buttons .outline a:hover,
.buttons .outline a:focus {
background-color: var(--action-0);
color: var(--action-contrast);
border-color: var(--action-0);
}
.buttons a {
width: 100%;
}
details .icon {
--w: 1.5em;
}
details .filters .icon {
--w: 1em;
}
button.voted .icon,
button.favourite.favourited {
animation: favourite-pop .4s cubic-bezier(.25, .46, .45, .94);
}
@keyframes favourite-pop {
0% { transform: scale(1); }
50% { transform: scale(1.3); }
75% { transform: scale(.9); }
100% { transform: scale(1); }
}
button.filter-toggle {
border: 1px solid var(--base-200);
background-color: transparent;
white-space: nowrap;
font-size: 1rem;
height: var(--chip_);
width: var(--chip_);
min-height: 0;
padding: .35em;
--w: 1.2em;
}
.filter-toggle:hover {
border-color: var(--action-50);
color: var(--action-50);
}
.filter-toggle:focus {
background-color: var(--action-50);
color: var(--action-contrast);
}
button.favourite:not(.favourited) .heart-fill,
button.favourite.favourited .heart,
.toggle.notifications:not(.has) .bell-ringing,
.toggle.notifications.has .bell,
.vote button:not(.voted) .upvoted,
.vote button:not(.voted) .downvoted,
.vote .voted .upvote,
.vote .voted .downvote {
display: none;
}
button.favourite:not(.favourited) .heart,
button.favourite.favourited .heart-fill,
.toggle.notifications:not(.has) .bell,
.toggle.notifications.has .bell-ringing,
.vote button:not(.voted) .upvote,
.vote button:not(.voted) .downvote,
.vote .voted .upvoted,
.vote .voted .downvoted {
display: block;
}
/******************************************************************
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;
}
.icon-colour {
background: rgb(183, 51, 46);
background: linear-gradient(180deg, rgba(255,0,128,1) 0%, rgba(250,71,101,1) 14%, rgba(251,121,35,1) 28%, rgba(176,190,19,1) 42%, rgba(14,204,0,1) 56%, rgba(14,225,166,1) 70%, rgba(63,152,253,1) 84%, rgba(166,90,196,1) 100%);
}
.icon.grab {
cursor: grab;
}
main a .icon {
margin-right: .5rem;
}
/** TODO: Reintegrate this; currently svg is in .css
path#refresh {
transform-origin: center;
transform-box: fill-box;
animation: spin 1s var(--trans-fn) infinite;
}**/
/******************************************************************
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 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;
}
/******************************************************************
DETAILS
******************************************************************/
details {
padding: .25rem 0;
border-top: 1px solid var(--base-200);
border-bottom: 1px solid var(--base-200);
}
details[open] {
background-color: var(--base-50);
}
details summary {
--wrap: nowrap;
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: var(--base-100);
border-color: var(--base-100);
color: var(--contrast);
}
details[open] > summary {
background-color: var(--base-50);
}
details summary::after {
position: absolute;
right: .5rem;
top: .5rem;
--icon: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTIuMjQsMTAwLjI0bC04MCw4MGE2LDYsMCwwLDEtOC40OCwwbC04MC04MGE2LDYsMCwwLDEsOC40OC04LjQ4TDEyOCwxNjcuNTFsNzUuNzYtNzUuNzVhNiw2LDAsMCwxLDguNDgsOC40OFoiLz48L3N2Zz4=');
content: "";
background-color: 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: var(--action-0);
}
details[open] > summary::after {
background-color: var(--contrast);
}
details[open] > summary::after {
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;
}
}
/**************************************************
LIST OVERRIDES
**************************************************/
.term-list {
--justify: flex-start;
--align: center;
--wrap: nowrap;
--gap: 1.5rem;
--dir: row;
--w: 1em;
list-style: none;
padding: 0;
height: var(--btn);
display: flex;
justify-content: var(--justify);
align-items: var(--align);
gap: var(--gap);
flex-wrap: var(--wrap);
flex-direction: var(--dir);
position: relative;
overflow: auto hidden;
touch-action: pan-x;
text-transform: lowercase;
}
.term-list small {
vertical-align: baseline;
margin-left: .5rem;
font-style: italic;
}
.term-list li {
display: flex;
align-items: center;
}
.term-list a {
align-items: center;
}
.directory-list > ul
{
max-width: 100%;
}
.directory-list img {
width: 70px;
}
.directory-list .image {
display: flex;
flex-wrap: nowrap;
align-items: center;
}
.directory-list h3 {
margin: 0;
text-align: center;
font-weight: var(--fw-h-bold);
font-family: var(--heading);
position: sticky;
font-size: var(--txt-enormous);
width: 100%;
top: 0;
left: 0;
color: var(--base);
text-shadow: var(--base-200) 1px 1px 0;
user-select:none;
}
.directory-list > ul > li {
padding: 2rem;
align-items: center;
}
.directory-list > ul > li:nth-of-type(even) {
background-color: var(--base-100);
}
.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:var(--base);
}
@media (min-width: 768px) {
.directory-list h3 {
width: 20vw;
}
.directory-list > ul {
width: 100%;
}
.directory-list ul ul {
min-height: var(--txt-enormous);
}
.directory-list > ul > li {
padding: 2rem 10vw;
}
}
/**************************************************
COVER BLOCK
**************************************************/
.cover {
position: relative;
overflow: hidden;
min-height: 60vh;
padding: var(--btn);
}
.cover::before {
z-index: var(--coverIndex);
background-color: var(--action-0);
mix-blend-mode: var(--coverBlend);
background-position: center;
background-repeat: no-repeat;
background-size: cover;
content: '';
}
.cover::before,
.cover > video,
.cover > img {
position: absolute;
inset: 0;
width: 100%;
max-width: 100%;
height: 100%;
margin: 0;
}
.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;
}
}
/**************************************************
BLOCKQUOTE
**************************************************/
blockquote {
--background: var(--base-100);
--border: var(--action-0);
line-height: 1.2;
padding: var(--btn);
border-radius: 4rem;
background-color: var(--background);
}
blockquote .content {
margin: 12px auto;
max-width: min(680px, 80vw);
position: relative;
font-family: var(--heading);
font-weight: var(--fw-h-bold);
padding: 3rem 2.5rem;
border-radius: var(--radius-outer);
border: 2px solid var(--border);
}
blockquote .content::before,
blockquote .content::after {
position: absolute;
content: '';
left: 50px;
}
blockquote .content::before {
width: 80px;
border: 6px solid var(--background);
bottom: -3px;
z-index: 2;
}
blockquote .content::after {
border: 2px solid var(--border);
border-radius: 0 100% 0 0;
width: 60px;
height: 60px;
bottom: -60px;
border-bottom: 0;
border-left: 0;
z-index: 3;
}
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;
}
/******************************************************************
OVERLAYS - BASE PATTERN
******************************************************************/
dialog[open],
aside.expanded {
background-color: 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;
}
/**************************************************
MODALS DIALOGUE
**************************************************/
dialog[open] {
z-index:999;
--padding: 0;
top: 5vh;
width: min(500px, 95vw);
height: fit-content;
max-height: 90vh;
padding: var(--padding);
background-color: var(--base-50);
color: var(--contrast);
border: 1px solid var(--base-200);
}
dialog > .wrap,
dialog > form {
max-height: var(--maxHeight);
overflow: hidden auto;
margin: 0 0 0 1.5rem;
padding-right: 1.2rem;
padding-bottom: var(--btn);
width: calc(100% - 1.5rem);
}
dialog label {
font-weight: normal;
}
dialog :is(h2, 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;
left: 0;
right: 0;
width: 100%;
z-index: var(--z-6);
background-color: var(--action-100);
box-shadow: rgba(var(--base),var(--op-45)) var(--shdw-up);
}
.m-actions button {
width: 100%;
height: var(--chipchip);
border-radius: 0;
font-size: var(--txt-x-small);
--gap: .75rem;
color: var(--action-contrast);
background-color: var(--action-50);
border: 2px solid var(--action-50);
box-shadow:none;
}
.m-actions button:hover,
.m-actions button:focus {
background-color: var(--base);
color: 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;
}
/****************
QUERY BLOCK
****************/
.loop .item-grid {
grid-template-columns: repeat(1, 1fr);
}
@media (min-width: 768px) {
.loop .item-grid {
grid-template-columns: repeat(2, 1fr);
}
}
/**************************************************
TABLES
**************************************************/
table {
white-space: nowrap;
width: 100%;
display: block;
margin: 0 0 2rem;
border-radius: 4px;
height: var(--maxHeight);
overflow: auto;
position: relative;
}
thead,tfoot {
position: sticky;
z-index: 10;
background-color: var(--base);
text-transform: uppercase;
padding: .5rem 0;
line-height: 2;
font-weight: normal;
}
tr:nth-of-type(even){
background-color: 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 var(--contrast-200);
}
tfoot tr {
border-top: 1px solid 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: var(--base-100);
border-color: 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: var(--base);
}
/**************************************************
TOOLTIP
**************************************************/
[role=tooltip],
.hide-tooltip.hide-tooltip.hide-tooltip + [role="tooltip"] {
visibility: hidden;
position: absolute;
bottom: 2rem;
left: 1rem;
width: max-content;
height:fit-content;
max-width: 50vw;
padding: .5rem;
border-radius: var(--radius);
box-shadow: rgba(var(--base),var(--op-45)) var(--shdw);
background: var(--action-0);
color: var(--action-contrast);
}
body.menu_item [role=tooltip] {
left: auto;
right: 100%;
top: -200%;
z-index: var(--z-4);
}
[role=tooltip] p {
margin: 0;
}
[role=tooltip] p + p {
margin-top: .5rem;
}
.field:has([aria-describedby]:focus) [role=tooltip],
[aria-describedby]:hover ~ .has-tooltip [role="tooltip"],
[aria-describedby]:focus ~ .has-tooltip[role="tooltip"] {
visibility: visible;
display: block;
}
.has-tooltip {
display: inline-flex;
justify-content: flex-end;
position: absolute;
top: 0;
left: 0;
--w: 1.5rem
}
.tt-toggle {
cursor: pointer;
display: flex;
border-radius: 50%;
background-color: transparent;
}
.tt-toggle:hover,
.tt-toggle:focus {
background-color: var(--action-0);
color: var(--action-contrast);
}
.tt-toggle:hover + [role=tooltip],
.tt-toggle:focus + [role=tooltip] {
visibility: visible;
}
/************************************************************
SELECTOR
************************************************************/
dialog[open]#jvb-selector {
height: 70vh;
top: 15vh;
display: flex;
}
#jvb-selector > .wrap {
flex: 1;
}
/******************************************************************
STATUS INDICATORS
******************************************************************/
.status,
.item .status,
.status-badge {
border-radius: var(--radius);
font-size: 0.875rem;
font-weight: 500;
text-transform: capitalize;
}
[data-status="pending"],
.status.pending,
.status-badge.pending,
#queue .item .status.pending {
background: var(--base-100);
color: var(--contrast-200);
}
[data-status="processing"],
.status.processing,
.status-badge.processing,
#queue .item .status.processing {
background: var(--base-200);
color: var(--contrast-100);
animation: pulse-color 2s infinite;
}
[data-status="completed"],
.status.completed,
.status-badge.consulted,
.status-badge.treated,
#queue .item .status.completed {
background: var(--success);
color: var(--successText);
}
[data-status="failed"],
.status.failed,
.status-badge.error,
#queue .item .status.failed {
background: rgb(var(--error));
color: var(--errorText);
}
/******************************************************************
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: var(--action-0);
}
dialog.loading[open] i.icon {
animation: dance 2s ease-in-out infinite;
}
dialog.loading[open] h3 {
color: 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 var(--action-50);
border-radius: 50%;
animation: spin 1s var(--trans-fn) infinite;
}
/*****************************************************************************
MENU
*****************************************************************************/
.toggle-details {
gap: 2px;
}
body.menu_item #top {
z-index: var(--z-4);
position: relative;
}
section .toggle-details {
position: absolute;
right: 0;
top: 5rem;
}
[data-toggle=all] {
position: fixed;
bottom: calc(var(--btn_) + var(--btn) + .5rem);
right: 0;
z-index: var(--z-4);
background-color: var(--action-0);
color: var(--action-contrast);
}
[data-toggle] {
z-index: var(--z-1);
}
body:has(#queue[hidden]) [data-toggle=all] {
left: 1rem;
}
dialog:not([open]).col,
dialog:not([open]).row {
display: none;
}
@media (min-width:768px) {
section .toggle-details {
right: -10%;
}
}
/********************************************
TYPE TEXT
********************************************/
.typeText::after {
content: '|';
display: inline-block;
margin-left: 0;
animation: blink .75s step-end infinite;
}
@keyframes blink {
from, to { opacity: 1; }
50% { opacity: 0; }
}
/**************************************************
POPUPS: toast, cart, queue
**************************************************/
aside.main {
--wrap: nowrap;
--align: stretch;
position: fixed;
top: var(--btnbtn);
bottom: var(--btn_);
width: min(500px, calc(100vw - 2rem));
background-color: var(--base);
z-index: var(--z-5);
box-shadow: rgba(var(--base),var(--op-45)) var(--shdw);
padding: 1rem 1rem var(--btn);
overflow: hidden auto;
}
aside.main.referral {
padding-top: 0;
}
aside.main.referral nav.tabs {
padding: 1rem 0;
background-color:var(--base);
height: max-content;
min-height: var(--btn);
}
.qtoggle {
z-index: var(--z-6);
position: fixed;
bottom: var(--btn_);
width: var(--btn);
height: var(--btn);
background-color: rgba(var(--base),var(--op-4));
color: var(--contrast);
box-shadow: rgba(var(--base),var(--op-45)) var(--shdw);
transition: var(--trans-size), var(--trans-color);
}
.qtoggle:hover,
.qtoggle:focus {
background-color: rgba(var(--action-0),var(--op-6));
color: var(--action-contrast);
}
.qtoggle:disabled,
.qtoggle:disabled:hover,
.qtoggle:disabled:focus {
opacity: .5;
background-color: rgba(var(--base),var(--op-3));
color: var(--contrast);
}
/******************
CART
******************/
.toggle-cart {
right: 0;
border-radius: 4px 4px 4px var(--radius-outer);
}
body:has(#cart.expanded) .toggle-cart .icon {
display: none;
}
aside#cart {
padding-bottom: 6rem;
}
#cart form {
max-height: 100%;
overflow: hidden auto;
}
#cart nav.tabs {
z-index: var(--z-6);
top: 0;
}
#cart table {
height: auto;
}
#cart th {
padding: 0 1.5rem;
}
#cart table th:first-of-type {
width: 100%;
}
#cart nav.tabs {
position: sticky;
box-shadow: rgba(var(--base),var(--op-45)) var(--shdw);
}
#cart button[data-tab] {
flex: 1;
border-radius: 0;
}
#cart form > *:not(.tabs) {
max-width: 90%;
margin: 0 auto;
}
#cart form .empty p {
margin: .5rem 0!important;
}
#cart .cart-total.cart-total {
--gap: 0 1rem;
padding-right: 1rem;
position: absolute;
bottom: var(--btn);
width: 100%;
max-width: 100%;
background-color: rgba(var(--base),var(--op-6));
z-index: var(--z-6);
box-shadow: rgba(var(--base),var(--op-45)) var(--shdw-up);
}
.cart-total p {
--gap: 2rem;
max-width: 100%;
margin: 0;
}
.cart-total p span {
width: 6rem;
display: inline-block;
text-align: right;
}
.cart-total p + p {
font-weight: bold;
}
.cart-items .total {
font-weight: bold;
}
#cart .restored {
background-color: rgba(var(--action-0), var(--op-3));
border-radius: var(--radius-outer);
padding: 1rem;
}
.restored h3 {
font-size: var(--txt-medium);
margin: 0;
}
.restored p {
margin: 0;
}
.restored .row {
--gap: 0;
--wrap:nowrap;
--w: 1em;
}
/******************
TOAST
******************/
.toasts {
position: fixed;
top: 4rem;
right: -350px;
z-index: 1000;
width: 350px;
}
.toast {
background-color: rgba(var(--base),var(--op-6));
border-left: 4px solid var(--action-0);
padding: 1rem;
box-shadow: rgba(var(--base),var(--op-45)) var(--shdw);
left: 0;
position: relative;
opacity: 0;
transition: left .3s, opacity .3s;
}
.toast.success {
border-left-color: var(--success);
}
.toast.error {
border-left-color: rgb(var(--error));
}
.toast.info {
border-left-color: var(--warning);
}
.toast.show {
left: calc(-350px - 1rem);
opacity: 1;
}
.toast.hiding {
left: 0;
opacity: 0;
}
.toast-content p {
margin: 0;
}
.close-toast {
background: none;
border: none;
font-size: 1.25rem;
cursor: pointer;
opacity: .5;
transition: opacity .2s;
color: inherit;
}
.close-toast:hover {
opacity: 1;
}
/******************
QUEUE
******************/
#queue#queue {
width: min(500px, calc(100vw - 2rem));
}
#queue > * {
max-width: 100%;
}
.qtoggle {
left: 0;
border-radius: 4px 4px var(--radius-outer) 4px;
}
.qtoggle.expanded {
left: var(--btn);
width: min(calc(500px - var(--btn)), calc(100vw - 2rem - var(--btn)));
}
.qtoggle.saving .icon {
background-color: var(--action-0);
animation: spin .87s var(--trans-fn) infinite;
}
#queue .status-actions {
position: absolute;
bottom: 0;
left: 0;
right: 0;
z-index: var(--z-2);
}
#queue .status-actions .popup {
position: absolute;
z-index: -1;
width: max-content;
max-width: 300px;
background-color: var(--action-50);
color: var(--action-contrast);
border-radius: var(--radius);
padding: .25em .75em;
top: 1rem;
left: -100vw;
transition: left var(--trans-base);
}
aside#queue .popup::before{
content: '';
width: 10px;
height: 10px;
transform: rotate(-45deg);
background-color: var(--action-50);
z-index: -1;
left: -5px;
position: absolute;
top: calc(50% - 5px);
}
.expanded#queue .status-actions .popup.showing {
left: calc(100% + 1em);
}
#queue .status-actions .popup.showing {
left: calc(200vw + var(--btn_));
max-width: 75vw;
}
/** BADGES **/
.refresh .countdown,
#queue .item .status,
.filter .count,
.qtoggle .count,
.qtoggle .indicator {
z-index: var(--z-3);
--offset: 0;
position: absolute;
top: var(--offset);
background-color: rgba(var(--base),var(--op-3));
}
.expanded + .qtoggle .indicator,
.expanded + .qtoggle .count {
--offset: .25rem;
}
/* Status indicator */
.qtoggle .indicator {
right: var(--offset);
width: .75rem;
height: .75rem;
border-radius: 50%;
}
aside#queue.synced + .qtoggle .indicator {
background-color: var(--success);
}
aside#queue.pending + .qtoggle .indicator {
background-color: var(--warning);
animation: pulse 2s infinite;
}
.refreshNow.fetching .icon,
aside#queue.pending:not(.expanded) + .qtoggle .icon {
background-color: var(--action-0);
animation: spin 1s var(--trans-fn) infinite;
}
/* Status count badge */
/*.refresh .countdown {*/
/* --justify:center;*/
/* --align: center;*/
/* --offset: 0;*/
/* left: .25rem;*/
/* margin: 0 3px;*/
/* border-radius: 50%;*/
/* background-color: var(--base);*/
/* width: 1em;*/
/* height: 1em;*/
/*}*/
.refresh .countdown,
.qtoggle .count {
--align: center;
--justify: center;
left: var(--offset);
min-width: 1.25rem;
height: 1.25rem;
padding: 0 4px;
color: var(--contrast);
border-radius: var(--radius);
font-size: var(--txt-x-small);
}
#queue:has(.empty-queue) + .qtoggle .count {
display: none;
}
aside#queue .header {
padding: 15px;
border-bottom: 1px solid var(--base-200);
flex-shrink: 0;
--height: max-content;
width: 100%;
}
.qitems {
flex: 1;
width: 100%;
overflow: hidden auto;
overflow-anchor: none;
padding: .5rem 2rem;
--gap: .5rem;
}
.qitems .item {
width: 100%;
}
.qitems button {
--height: max-content;
}
aside#queue h3 {
margin: 0;
font-size: 16px;
color: var(--contrast);
}
#queue .filters {
padding: 1rem 0 0;
width: 100%;
}
#queue .filters .btn + label {
width: max-content;
position: relative;
height: var(--chip_);
font-size: var(--txt-x-small);
font-weight: var(--fw-h-light);
box-shadow: var(--shdw-none);
}
#queue .filters label .count {
width: 1em;
height: 1em;
position: absolute;
top: -8px;
right: -4px;
background: var(--base-100);
border-radius: 50%;
z-index: 5;
}
#queue .filters label .count:empty {
display: none;
}
#queue .failed .bar,
#queue .failed_permanent .bar {
background-color: rgb(var(--error));
opacity: .2;
}
#queue span.completed {
margin-left: auto;
}
#queue .filters .filter {
background-color: transparent;
white-space: nowrap;
font-size: var(--txt-x-small);
}
#queue .filters .filter.active {
background: var(--base-200);
border-color: transparent;
}
#queue .filter:hover,
#queue .filter:focus {
background-color: var(--action-0);
color: var(--action-contrast);
}
#queue .progress .row.btw {
--justify: flex-end;
}
#queue .progress .details {
font-size: var(--txt-small);
}
/* Filter count badge */
.filter .count {
--offset: -8px;
right: var(--offset);
background: var(--base-200);
color: var(--contrast-200);
border-radius: 10px;
min-width: 18px;
height: 18px;
font-size: 10px;
}
.filter .count:empty {
display: none;
}
/* Empty state */
.empty-queue {
height: 100px;
color: var(--contrast-200);
font-size: var(--txt-x-small);
font-style: italic;
}
.refresh .countdown:not(.counting),
aside#queue:has(.empty-queue) .refresh .count {
display: none;
}
/* Queue items */
#queue .item {
padding: 15px;
background: var(--base-100);
border-radius: var(--radius);
transition: all .2s ease;
box-shadow: var(--shdw-none);
}
#queue .item:hover {
box-shadow: rgba(var(--base),var(--op-45)) var(--shdw);
}
#queue .item .header {
position: relative;
padding: .25rem 0;
}
#queue .item .type {
font-size: var(--txt-x-small);
}
#queue .item .status {
--w: 1.3em;
--gap: 0;
--justify:center;
--align: center;
--offset: -1.2rem;
aspect-ratio: 1;
right: var(--offset);
border-radius: 50%;
color: var(--contrast-200);
background-color: var(--base-50);
border: 1px solid var(--base-200);
width: 2em;
height: 2em;
}
#queue .item .status.completed:hover {
color: var(--contrast-200);
}
#queue .item button {
font-size: 16px;
padding: 0;
line-height: 1;
opacity: .5;
min-height: 0;
transition: opacity .2s;
}
#queue .item button:hover {
opacity: 1;
}
/* Item details */
#queue .item .info {
margin-top: 8px;
font-size: var(--txt-x-small);
}
#queue .item .info .time {
--gap: 7px;
font-size: 10px;
}
/* Item actions */
#queue .item .actions {
--gap: 8px;
margin-top: 1rem;
}
#queue .item .actions button {
padding: 6px 12px;
font-size: 12px;
background: var(--base-200);
border: none;
border-radius: 4px;
cursor: pointer;
transition: all .2s;
color: var(--contrast);
}
#queue .item .actions .retry {
background-color: var(--secondary-200);
color: var(--secondary-contrast);
}
#queue .item .actions button:hover {
opacity: .9;
}
/* Queue actions footer */
.queue-actions {
padding: .5rem 0;
border-top: 1px solid var(--base-200);
flex-shrink: 0;
}
.queue-actions button {
--height: max-content;
padding: .75rem;
width: 100%;
font-size: var(--txt-x-small);
}
/* Refresh area */
.status-actions > .refresh {
position: relative;
font-size: var(--txt-x-small);
}
.refreshNow {
width: var(--btn);
height: var(--btn);
}
.refreshNow:hover {
background: var(--base-200);
color: var(--contrast-200);
}
.icon.refresh {
--w: 18px;
}
/**************************************************
DELAY
**************************************************/
.item-grid, #queue {
counter-reset: delay-counter;
}
.item {
counter-increment: delay-counter;
}
.item .progress .fill::after {
--delay: calc(counter(delay-counter) * .1s);
}
/**************************************************
PROGRESS
**************************************************/
.progress .bar {
height: 6px;
display: block;
border-radius: 6px;
overflow: hidden;
background: var(--base-200);
position: relative;
}
.progress .fill {
height: 100%;
background: var(--action-0);
border-radius: 6px;
width: 0;
transition: width .3s ease;
}
.progress .details {
margin-top: 5px;
font-size: var(--txt-x-small);
color: 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);
}
/**************************************************
ACTIONS
**************************************************/
.additional-actions.additional-actions {
padding: 0;
background-color: transparent;
}
.additional-actions .buttons {
position: fixed;
bottom: var(--btn_);
right: 1rem;
margin: 0;
--gap: 1rem;
z-index: var(--z-6);
width: fit-content;
}
.additional-actions .buttons button {
height: var(--btn);
width: var(--btn);
background-color: rgba(var(--base),var(--op-4));
color: var(--contrast);
box-shadow: rgba(var(--base),var(--op-45)) var(--shdw);
}
.additional-actions .buttons button:hover {
background-color: var(--action-0);
color: var(--action-contrast);
}
.additional-actions .buttons button:disabled,
.additional-actions .buttons button:disabled:hover,
.additional-actions .buttons button:disabled:focus {
opacity: .5;
background-color: rgba(var(--base),var(--op-3));
color: var(--contrast);
}
.additional-actions .buttons button:last-of-type {
border-radius: 4px 4px 4px var(--radius-outer);
}
aside.left {
transition: left var(--trans-base);
left: var(--offScreen);
border-radius: 0 var(--radius-outer) var(--radius-outer) 0;
}
aside.left.expanded {
left: 0;
}
aside.right {
transition: right var(--trans-base);
right: var(--offScreen);
border-radius: var(--radius-outer) 0 0 var(--radius-outer);
}
aside.right.expanded {
right: 0;
}
aside.right.expanded button.close {
position: sticky;
bottom: calc(var(--btn) * -1);
left: 0;
border-bottom-left-radius: var(--radius-outer);
width: var(--btn);
height: var(--btn);
}
.additional-actions .buttons:has(.expanded) button:not(.expanded) {
display: none;
}
.additional-actions .buttons:has(.expanded){
right: 0;
}
.additional-actions .buttons button {
transition: right var(--trans-base), var(--trans-size);
}
.additional-actions .buttons .expanded {
width: calc(min(500px, calc(100vw - 2rem)));
background-color: var(--base);
}
.additional-actions .buttons button:hover,
.additional-actions .buttons .expanded:hover {
background-color: var(--action-0);
color: var(--action-contrast);
}
[type=submit] {
width: 100%;
height: var(--btn);
background-color: var(--action-0);
color: var(--action-contrast);
box-shadow: var(--shdw-none);
font-weight: bold;
}
[type=submit]:hover {
box-shadow: rgba(var(--base),var(--op-45)) var(--shdw);
border: 2px solid var(--action-0);
color: var(--action-0);
background-color: var(--action-contrast);
}
aside nav.tabs {
position: sticky;
bottom: unset;
top: 0;
left: 0;
right: 0;
}
aside .tab-content.active {
padding: 1rem;
min-height: 100%;
}
aside header h3 {
font-size: var(--txt-medium);
margin: 1rem 0;
text-align: center;
}
aside header p {
margin: .25rem 0;
text-align: center;
}
aside h4 {
font-size: var(--txt-x-small);
margin: 1rem 0 0 0;
}
code {
width: 100%;
margin: .5rem;
padding: .5rem;
user-select: all;
text-align: center;
border-radius: 4px;
background-color: var(--base-200);
border: 1px solid var(--contrast-200);
}
.restore-form {
background-color: rgba(var(--action-0), var(--op-3));
border: 1px solid var(--action-200);
padding: .5rem;
border-radius: var(--radius-outer);
margin: 1rem 2rem;
}
.restore-form h3 {
text-align: center;
margin: 1rem 0 0;
font-size: var(--txt-medium);
}
.restore-form p {
margin: .5rem 0;
}
.fstatus {
z-index: var(--z-5);
background-color: rgba(var(--base),var(--op-6));
border-radius: 4px;
padding: 0 .5rem;
position: fixed;
top: var(--btnbtn);
right: 1rem;
--w: 1em;
box-shadow:var(--shdw);
display:flex;
flex-wrap: nowrap;
gap: 1rem;
}
@media (min-width: 768px) {
.fstatus {
right:calc(var(--btn_) + 1rem);
bottom: 0;
top: unset;
}
body:has(.fixed.bottom) .fstatus {
bottom: var(--btn_);
}
}
.fstatus .spinner {
display: none;
}
.fstatus.loading .spinner {
display: inline-block;
}
.fstatus p {
margin: 0;
padding: .25rem;
}
/**************************************************
CALLOUT SECTIONS
**************************************************/
.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: var(--action-0);
color: var(--action-contrast);
}
.callalt.callalt {
background-color: 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;
}
.attn {
animation: pulse-color 5s infinite;
animation-delay: 1s;
}
.media-text > div,
.media-text figure {
width: 100%;
margin: 0;
}
@media (min-width:768px ){
.media-text {
--wrap: nowrap;
}
}
.media-text > div {
max-width: var(--content);
margin: 0 auto;
padding: 2rem;
}
.timeline.terms ul,
.timeline.terms {
list-style: none;
display: inline-flex;
flex-wrap: wrap;
justify-content: space-between;
align-items: flex-start;
}
.timeline.terms ul {
gap: 1rem;
}
.timeline.terms > li {
width: 100%;
}
@media (min-width: 768px) {
.timeline.terms > li {
width: 50%;
}
}
/**********************************
GALLERY
**********************************/
dialog.gallery[open] {
position: fixed;
inset: 1rem;
margin: 0;
border: none;
width: calc(100% - 2rem);
height: calc(100% - 2rem);
padding: 0;
background: rgba(var(--base),var(--op-6));
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
backdrop-filter: blur(3px);
z-index: var(--z-9);
max-height: 100vh;
max-width: 100vw;
}
.gallery .controls {
order: 3;
justify-content: flex-end;
--height: 2rem;
}
.gallery .controls .cancel {
order: 3;
}
dialog.gallery::backdrop {
background: rgba(var(--base), var(--op-4));
}
dialog.gallery .wrap {
position: relative;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
overflow: hidden;
}
dialog.gallery .cancel:hover {
background: rgba(var(--base),var(--op-4));
}
dialog.gallery .content {
position: relative;
flex: 1 1 auto;
width: 100%;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
}
dialog.gallery .content .image {
max-width: 90vw;
max-height: 85vh;
object-fit: contain;
transition: transform 0.15s ease-out;
touch-action: none;
}
dialog.gallery .image-left,
dialog.gallery .image-right {
position: absolute;
opacity: 0;
pointer-events: none;
}
dialog.gallery details {
position: absolute;
bottom: 2rem;
left: 50%;
transform: translateX(-50%);
width: calc(100% - 2rem);
max-width: 600px;
background: rgba(0,0,0,0.45);
color: #fff;
border-radius: 4px;
overflow: hidden;
z-index: 10;
}
dialog.gallery details summary {
padding: 0.75rem 1rem;
cursor: pointer;
user-select: none;
}
dialog.gallery details[open] .item-info {
padding: 1rem;
}
dialog.gallery .counter {
position: absolute;
bottom: 1rem;
left: 1rem;
background: rgba(var(--base),var(--op-4));
color: var(--contrast);
padding: 0.4rem 0.8rem;
border-radius: 3px;
font-size: 0.85rem;
z-index: 10;
}
dialog.gallery .favourite {
position: absolute;
top: 1rem;
left: 1rem;
z-index: 10;
}
dialog.gallery .image {
opacity: 0;
transition: opacity .2s ease, transform .15s ease-out;
}
dialog.gallery .image[src] {
opacity: 1;
}
/**************************************************
REFERRAL SYSTEM
**************************************************/
.referral-reward-banner {
background: var(--base-100);
color: var(--action-0);
border: 2px dashed var(--action-0);
padding: 1.5rem;
border-radius: 8px;
text-align: center;
margin-bottom: 1.5rem;
display: flex;
justify-content: center;
align-items: center;
}
.referral-reward-banner .icon {
--w: 3rem;
}
.referral-reward-banner h4 {
margin: 0;
font-size: 1.25rem;
font-weight: 700;
color: var(--contrast);
}
.check-code-btn {
width: 100%;
margin-top: 0.5rem;
background: var(--base-100);
color: var(--contrast-100);
border: 1px solid var(--contrast-200);
display: flex;
align-items: center;
justify-content: center;
gap: 0.5rem;
}
.code-status {
padding: 0.75rem;
border-radius: 4px;
margin-top: 0.5rem;
font-size: 0.875rem;
}
.code-status.loading {
background: var(--base-200);
color: var(--contrast-200);
}
.code-status.success {
background: var(--successBack);
color: var(--successText);
border: 1px solid var(--successBack);
}
.code-status.error {
background: var(--errorBack);
color: var(--errorText);
border: 1px solid var(--errorBack);
}
.referral-footer {
text-align: center;
padding: 1rem 0;
border-top: 1px solid var(--base-200);
margin-top: 1rem;
}
.referral-footer .text-link {
color: var(--contrast-200);
text-decoration: none;
font-size: 0.875rem;
}
.referral-footer .text-link:hover {
color: var(--action-0);
text-decoration: underline;
}
.share-section {
margin-bottom: 1.5rem;
}
.share-section h4 {
margin: 0 0 0.75rem;
font-size: 0.875rem;
text-transform: uppercase;
letter-spacing: 0.5px;
color: var(--contrast-200);
}
.copy-section {
margin-bottom: 1.5rem;
}
.copy-section h4 {
margin: 0 0 0.5rem;
font-size: 0.875rem;
text-transform: uppercase;
letter-spacing: 0.5px;
color: var(--contrast-200);
}
.copy-group {
--gap: 0 .5rem;
margin-bottom: 0;
}
.copy-group + .hint {
margin: .25rem 1rem 1rem;
}
.copy-target {
flex: 1;
padding: 0.75rem;
background: var(--base-100);
border: 1px solid var(--base-200);
border-radius: 4px;
font-family: 'Monaco', 'Courier New', monospace;
font-size: 0.875rem;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
user-select: all;
}
.copy-btn {
flex-shrink: 0;
width: var(--chipchip);
height: var(--chipchip);
min-height: 0;
padding: 0;
}
.copy-btn.success .icon-copy,
.copy-btn .icon-check-circle {
display: none;
}
.copy-btn.success .icon-check-circle {
display: inline-block;
}
.copy-btn.success {
background: var(--successBack);
color: var(--success);
}
.recent-referrals-section {
margin-bottom: 1.5rem;
padding-bottom: 1.5rem;
border-bottom: 1px solid var(--contrast-200);
}
.recent-referrals-section h4 {
margin: 0 0 0.75rem;
font-size: 0.875rem;
text-transform: uppercase;
letter-spacing: 0.5px;
color: var(--contrast-200);
}
.recent-referrals-list {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.referral-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0.75rem;
background: var(--base-100);
border-radius: 4px;
font-size: 0.875rem;
}
.referral-info {
display: flex;
align-items: center;
gap: 0.5rem;
}
.referral-info strong {
color: var(--contrast-200);
}
.referral-date {
font-size: 0.75rem;
}
.no-referrals,
.loading,
.message {
text-align: center;
padding: 1rem;
color: var(--contrast-200);
font-size: 0.875rem;
}
.stats-summary {
margin-bottom: 1.5rem;
}
.stat-row {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0.75rem;
border-bottom: 1px solid var(--base-200);
}
.stat-row:last-child {
border-bottom: none;
}
.stat-row.highlight {
background: var(--base-100);
border-radius: 4px;
border: 1px solid var(--base);
font-weight: 600;
}
.stat-label {
color: #666;
font-size: 0.875rem;
}
.stat-value {
color: #333;
font-weight: 600;
font-size: 1rem;
}
.stat-row.highlight .stat-value {
color: var(--action-0);
font-size: 1.25rem;
}
.view-dashboard-btn {
display: flex;
align-items: center;
justify-content: center;
gap: 0.5rem;
width: 100%;
padding: 0.875rem;
background: var(--action-0);
color: var(--action-contrast);
text-decoration: none;
border-radius: 8px;
font-weight: 600;
transition: all 0.2s ease;
}
aside button:not(.button, .qtoggle),
aside a.button{
position: relative;
top: 0;
box-shadow: var(--shdw-none);
transition: top var(--trans-base), box-shadow var(--trans-base);
}
aside button:not(.button, .qtoggle, :disabled):hover,
aside a.button:hover {
top: -4px;
box-shadow: rgba(var(--contrast),var(--op-45)) var(--shdw-down);
}
.view-dashboard-btn:visited {
color: var(--action-contrast);
}
.view-dashboard-btn:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(102, 126, 234, 0.3);
}
.success-content {
padding: 2rem 1rem;
text-align: center;
}
.success-content h3 {
color: var(--success);
margin-bottom: 1rem;
}
.success-content p {
margin-bottom: 0.75rem;
color: var(--base-200);
}
.success-content .hint {
font-size: 0.875rem;
color: var(--base-200);
font-style: italic;
}
.code-status.loading::before {
/*.loading::before {*/
content: '';
display: inline-block;
width: 1rem;
height: 1rem;
border: 2px solid var(--action-200);
border-top: 2px solid var(--action-0);
border-radius: 50%;
animation: spin 1s linear infinite;
margin-right: 0.5rem;
vertical-align: middle;
}
.share-buttons-grid a {
padding: 0;
min-height: 0;
width: var(--chipchip);
height: var(--chipchip);
}
.share-buttons-grid a .icon {
margin-right: 0;
}
@media (max-width: 768px) {
.share-buttons-grid {
grid-template-columns: repeat(3, 1fr);
}
.referral-item {
flex-direction: column;
align-items: flex-start;
gap: 0.5rem;
}
}
/***************
TOGGLE TEXT
***************/
.toggle-text input {
display: none;
}
.toggle-text input + label {
font-weight: normal;
color: var(--contrast)!important;
text-transform: none;
cursor: pointer;
position: relative;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.toggle-text label::before,
.toggle-text label::after {
display: none!important;
}
.toggle-text label {
padding-left: 0!important;
}
.toggle-text input + label .text {
position: relative;
margin: 0;
--gap: 0;
font-weight: bold;
width: fit-content;
padding: 2px 4px;
border: 1px solid var(--action-50);
border-radius: 4px;
color: var(--action-50)!important;
}
table .toggle-text input+label .text {
color: var(--contrast)!important;
border-color: var(--contrast);
}
.toggle-text:hover .text,
table .toggle-text:hover .text {
background-color: var(--action-50);
color: var(--light-0)!important;
border-color: var(--action-50);
}
.toggle-text input + label .off,
.toggle-text input + label .on {
transition: var(--trans-transform), opacity var(--trans-base);
}
.toggle-text input + label .off {
opacity: 1;
max-width: 100%;
transform: none;
}
.toggle-text input + label .on {
opacity: 0;
max-width: 0;
transform: translate3d(0, 100%, 0);
}
.toggle-text input:checked + label .off {
opacity: 0;
max-width: 0;
transform: translate3d(0, -100%, 0);
}
.toggle-text input:checked + label .on {
max-width: 100%;
opacity: 1;
transform: none;
}
/******************************************************************
TAXONOMY SELECTOR
******************************************************************/
.items-container {
margin: 0;
padding: 0;
width: 100%;
}
details.create-term {
margin-top: auto;
width: 100%;
}
#jvb-selector .search-wrapper {
margin-top: auto;
width:100%;
}
.search-wrapper:not(.open) .search {
margin-left: auto;
}
.search-wrapper + details.create-term {
margin-top: 0;
}
details.create-term .field,
.create-term[open] summary {
margin-bottom: 1rem;
}
details.create-term .field {
max-width: 100%;
}
#jvb-selector > .wrap {
--wrap: nowrap;
--justify: flex-start;
}
#jvb-selector .items-wrap {
width: 100%;
padding: 1rem 0;
border-top: 1px solid var(--base-200);
}
#jvb-selector .items-container {
display: grid;
grid-template-columns: repeat(2, 1fr)
}
#jvb-selector li {
list-style: none;
}
#jvb-selector li label {
padding-left: 0!important;
}
/*.auto-wrapper {*/
/* position: absolute;*/
/* bottom: -105%;*/
/* background-color: rgba(var(--base), var(--op-5));*/
/* backdrop-filter: blur(2px);*/
/* border-radius: var(--radius);*/
/* z-index: 1;*/
/*}*/
.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: 0.25rem;
min-height: var(--chip);
}
.submit-term {
gap: 0;
}
.submit-term strong {
padding-right: 1rem;
}
.selected-items {
width:100%;
padding: .5rem;
border-radius: var(--radius);
background-color:var(--base);
--justify: flex-start;
--gap: .5rem;
margin-bottom: .5rem;
}
.selected-items.selected-items:empty {
padding:0;
background-color:transparent;
margin: 0;
}
.selected-item {
padding: .25rem .5rem;
margin: .125em;
background: var(--base-100);
border-radius: .25rem;
font-size: var(--txt-medium);
border: 1px solid var(--base-200);
position: relative;
}
.remove-term.remove-term {
min-height: 0;
height: var(--chip);
width: var(--chip);
padding: 0;
--w: .75em;
}
.clear-filters {
margin-left: auto;
border: 1px solid var(--base-200);
}
/**************************************************
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);
}
}
.content-term-list, .content-term-list ul,
.content-term-list li {
list-style: none;
margin: 0;
padding: 0;
}
.content-term-list .item {
flex-direction: column;
}
.content-term-list h3 {
font-size: var(--txt-medium);
font-weight: var(--fw-h);
}