/* =================================================================================================
   kit.css: the DOM side of the adventure.io UI kit.
   Fonts, design tokens, the CSS theme of every component, the gpu-paint switch, focus rings, motion
   and forced-colors rules. Owner: kitcss (design/CONTRACTS.md).
   Reference for other slots: design/KITCSS.md (every class, custom property and data attribute).
   Components: design/UIKIT.md. Rules: design/DESIGN.md §5, §10, §14, §15.9, §16.
   Loaded first by site/index.html; portal/build.sh versions it. It is additive: no rule here styles
   a bare element or an existing id, so a surface that uses no .k-* class renders exactly as before.
   The two @generated blocks are rewritten by `node design/kitcss-tokens.mjs`; edit everything else.
   ================================================================================================= */

/* ------------------------------------------------------------------------------------------------
   0. Fonts (DESIGN §5, §16.3). Gluten + Fredoka are preloaded by <head>; Martian Mono loads only
   after first paint: LCD text uses --f-lcd, which names Martian Mono once html.mono-ready is set
   (idle or 1 s), so the browser does not request the font during the first paint.
   ------------------------------------------------------------------------------------------------ */
@font-face {
  font-family: 'Gluten';
  src: url('/fonts/gluten-latin-wght600-900.woff2') format('woff2');
  font-weight: 600 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2190-2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Fredoka';
  src: url('/fonts/fredoka-latin-wght400-700.woff2') format('woff2');
  font-weight: 400 700;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2190-2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Martian Mono';
  src: url('/fonts/martianmono-latin-wght500-700.woff2') format('woff2');
  font-weight: 500 700;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2190-2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* Legacy faces: still used by the pre-redesign surfaces (base, hero, toolbar, gameview, nogpu, admin).
   Remove both (and site/fonts/SpaceGrotesk.woff2, JetBrainsMono.woff2) once no stylesheet names them. */
@font-face {
  font-family: 'Space Grotesk';
  src: url('/fonts/SpaceGrotesk.woff2') format('woff2');
  font-weight: 300 700;
  font-display: block;
}
@font-face {
  font-family: 'JetBrains Mono';
  src: url('/fonts/JetBrainsMono.woff2') format('woff2');
  font-weight: 400 800;
  font-display: block;
}

/* ------------------------------------------------------------------------------------------------
   1. Tokens (generated from design/tokens.json)
   ------------------------------------------------------------------------------------------------ */
/* @generated tokens:begin — node design/kitcss-tokens.mjs, from design/tokens.json v1.1.0. Do not edit by hand. */
/* Declared on `html` (specificity 0,0,1) on purpose: a legacy stylesheet that still defines the same
   names on :root (admin.css: --text, --danger, --warn) keeps its own values until its owner migrates. */
html {
  /* color · void */
  --void-0: #0C0716;
  --void-1: #140B24;
  --void-2: #1D1133;
  --void-3: #29194A;
  --void-4: #3A2566;
  --void-5: #4A3380;
  --glow-core: #2A1450;
  --glow-mid: #170C2B;
  --ring: #2B1850;
  --junk-fill: #1E1236;
  --junk-line: #33205A;
  /* color · surface */
  --gadget-face: #2A1D47;
  --gadget-lip: #120A20;
  --gadget-strip: #46337A;
  --screw: #4A3A70;
  --feeler: #9A8FBE;
  --bar: #1B1030;
  --bar-strip: #35245E;
  --pill: #0B0712;
  --rim-line: #2E1D52;
  --slab-lip: #08040F;
  --lcd: #081A0C;
  --lcd-top: #03100A;
  --lcd-bottom: #0C2612;
  --lcd-land: #123A18;
  --lcd-grid: #1C4A24;
  --lcd-bezel: #1A1030;
  --danger-bg: #2A1020;
  --toast: #1D1133;
  /* color · goo */
  --goo-9: #0E3A12;
  --goo-8: #136B24;
  --goo-7: #1C9E36;
  --goo-5: #4BEA3C;
  --goo-3: #A6FF6B;
  --goo-1: #EAFFD2;
  --goo-glow: #6DFF4A;
  --dormant-3: #1C9E36;
  --dormant-5: #136B24;
  --dormant-7: #0E3A12;
  --goo-data: #2BAE2C;
  --goo-data-hover: #3CC43A;
  /* color · accent */
  --pink: #FF4FA0;
  --pink-lip: #A8185C;
  --pink-hi: #FF9ACB;
  --tang: #FF9A2E;
  --tang-lip: #B45A0B;
  --tang-hi: #FFC685;
  --sky: #5CC8FF;
  --sky-lip: #1F74AE;
  --sky-hi: #B5E6FF;
  --peri: #8B7CFF;
  --peri-lip: #4E3CC4;
  --peri-hi: #C2B9FF;
  --butter: #FFE066;
  --butter-lip: #B99A1C;
  --butter-hi: #FFF0A8;
  --cream: #FFF1D6;
  --cream-lip: #C9B38A;
  --cream-hi: #FFFFFF;
  --plum: #3F2C6B;
  --plum-lip: #1B1030;
  --plum-hi: #5A4390;
  --plum-rim: #7A66C4;
  --teal: #7EE8C8;
  --teal-lip: #3BA88A;
  /* color · text */
  --text-hi: #FFF4E0;
  --text: #E8DDF7;
  --text-dim: #A898C8;
  --text-mute: #6F5F94;
  --text-ink: #0B0614;
  --placeholder: #76674C;
  --link: #A6FF6B;
  --link-on-cream: #136B24;
  --on-cream-dim: #4A3E2A;
  /* color · status */
  --danger: #FF4D5E;
  --danger-lip: #9E1426;
  --warn: #FFB020;
  --ok: #4BEA3C;
  --info: #5CC8FF;
  /* color · ink, focus ring, brand eye, birb */
  --ink: #07030D;
  --focus-inner: #07030D;
  --focus-outer: #A6FF6B;
  --focus-inner-w: 4px;
  --focus-outer-w: 4px;
  --eye-sclera: #FAF7F2;
  --eye-pupil: #07030D;
  --eye-glint: #FFFFFF;
  --bird-body: #8B7CFF;
  --bird-shade: #6453E0;
  --bird-hi: #C4BBFF;
  --bird-belly: #FFF1D6;
  --bird-belly-shade: #EBD3AA;
  --bird-beak: #FF9A2E;
  --bird-beak-shade: #CF620D;
  --bird-beak-hi: #FFD29A;
  --bird-cheek: #FF6FAE;
  --bird-mouth: #3A0A1E;
  --bird-tongue: #FF7FA8;
  --bird-band: #3B3450;
  --bird-band-hi: #5E567A;
  --bird-led: #4BEA3C;
  /* font families (--f-lcd is the gated LCD stack: Martian Mono only after html.mono-ready) */
  --f-display: 'Gluten', 'Fredoka', system-ui, sans-serif;
  --f-body: 'Fredoka', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --f-mono: 'Martian Mono', ui-monospace, 'SF Mono', Menlo, monospace;
  --f-lcd: ui-monospace, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;
  --fw-display-voice: 600;
  --fw-display-title: 800;
  --fw-display-wordmark: 900;
  --fw-body-body: 400;
  --fw-body-ui: 500;
  --fw-body-label: 600;
  --fw-body-link: 700;
  --fw-body-stat: 600;
  --fw-mono-lcd: 500;
  --fw-mono-readout: 600;
  --fw-mono-count: 700;
  /* type floors (px; coarse values below) */
  --floor-info-fine: 12px;
  --floor-info-coarse: 13px;
  --floor-input-fine: 16px;
  --floor-input-coarse: 16px;
  --floor-sticker: 13px;
  --floor-bubble: 16px;
  --floor-chart-tick: 12px;
  --floor-info: 12px;
  /* type scale: --fs size · --fw weight · --lh line height · --tl display lip */
  --fs-display-hero: 62px;
  --fw-display-hero: 800;
  --lh-display-hero: 1.02;
  --tl-display-hero: 5px;
  --fs-display-page: 64px;
  --fw-display-page: 800;
  --lh-display-page: 1.05;
  --tl-display-page: 5px;
  --fs-display-l: 44px;
  --fw-display-l: 800;
  --lh-display-l: 1.05;
  --tl-display-l: 4px;
  --fs-display-m: 30px;
  --fw-display-m: 800;
  --lh-display-m: 0.98;
  --tl-display-m: 3px;
  --fs-display-m-long: 26px;
  --fw-display-m-long: 800;
  --lh-display-m-long: 0.98;
  --tl-display-m-long: 3px;
  --fs-display-s: 26px;
  --fw-display-s: 800;
  --lh-display-s: 1;
  --tl-display-s: 2.5px;
  --fs-display-xs: 20px;
  --fw-display-xs: 800;
  --lh-display-xs: 1;
  --fs-display-key: 24px;
  --fw-display-key: 800;
  --fs-display-pill: 18px;
  --fw-display-pill: 800;
  --fs-sticker: 13px;
  --fw-sticker: 800;
  --fs-bird-voice: 18px;
  --fw-bird-voice: 600;
  --fs-body-l: 18px;
  --fw-body-l: 400;
  --lh-body-l: 26px;
  --fs-body-m: 16px;
  --fw-body-m: 400;
  --lh-body-m: 24px;
  --fs-body-doc: 17px;
  --fw-body-doc: 400;
  --lh-body-doc: 28px;
  --fs-body-s: 15px;
  --fw-body-s: 400;
  --lh-body-s: 21px;
  --fs-label: 15px;
  --fw-label: 600;
  --fs-key: 16px;
  --fw-key: 600;
  --fs-meta: 13px;
  --fw-meta: 500;
  --lh-meta: 18px;
  --fs-caption: 14px;
  --fw-caption: 600;
  --fs-stat: 32px;
  --fw-stat: 600;
  --fs-lcd-input: 16px;
  --fw-lcd-input: 500;
  --fs-lcd-readout: 12px;
  --fw-lcd-readout: 600;
  --fs-live-pill: 13px;
  --fw-live-pill: 600;
  --fs-count: 13px;
  --fw-count: 600;
  --fs-chart-tick: 12px;
  --fw-chart-tick: 500;
  --fs-display-state: 26px;
  --fw-display-state: 800;
  --lh-display-state: 1.02;
  --tl-display-state: 2.5px;
  --fs-display-state-l: 28px;
  --fw-display-state-l: 800;
  --lh-display-state-l: 1.02;
  --tl-display-state-l: 3px;
  --fs-display-sub: 24px;
  --fw-display-sub: 700;
  --lh-display-sub: 1.1;
  --fs-plate-count: 13px;
  --fw-plate-count: 600;
  /* space */
  --s-0: 0px;
  --s-1: 2px;
  --s-2: 4px;
  --s-3: 8px;
  --s-4: 12px;
  --s-5: 16px;
  --s-6: 20px;
  --s-7: 24px;
  --s-8: 28px;
  --s-9: 32px;
  --s-10: 40px;
  --s-11: 48px;
  --s-12: 64px;
  --s-13: 80px;
  --s-14: 96px;
  --gutter: 36px;
  --gutter-mobile: 16px;
  --hero-column-left: 72px;
  --card-gap: 28px;
  --row-gap: 40px;
  --section-gap: 64px;
  --content-max: 1528px;
  /* radius */
  --r-pill: 999px;
  --r-card: 26px;
  --r-panel: 26px;
  --r-window: 18px;
  --r-tile: 16px;
  --r-field: 14px;
  --r-toast: 20px;
  --r-box-art: 10px;
  --r-box-art-inner: 6px;
  --r-sticker: 7px;
  --r-tooltip: 12px;
  --r-sheet: 28px;
  --r-dock: 30px;
  /* ink outline widths */
  --ink-component: 3px;
  --ink-small: 2.5px;
  --ink-character: 3.6px;
  --ink-icon-at-24: 2.3px;
  --ink-chart-mark: 0px;
  --ink-portal-3d: 3px;
  /* lips (object thickness) */
  --lip-key-s: 4px;
  --lip-key: 5px;
  --lip-key-l: 7px;
  --lip-chip: 5px;
  --lip-card: 7px;
  --lip-card-hover: 14px;
  --lip-panel: 8px;
  --lip-gadget: 9px;
  --lip-toast: 6px;
  --lip-sticker: 3px;
  --lip-pill: 3px;
  --lip-box-art: 5px;
  --lip-tile: 4px;
  --lip-field: 0px;
  --lip-press-sink-to: 2px;
  /* shadows (CSS blur = 2 x the token blur, which is a Gaussian sigma) */
  --shadow-float: 0 20px 28px rgba(0, 0, 0, 0.45);
  --shadow-float-hover: 0 26px 32px rgba(0, 0, 0, 0.6);
  --shadow-toast: 0 16px 16px rgba(0, 0, 0, 0.5);
  /* goo material */
  --goo-shade-px: 7px;
  --goo-lit-px: 5px;
  /* motion: easings, durations (ms), springs (unitless, for JS), ambient periods */
  --ease-goo-pop: cubic-bezier(.34, 1.56, .64, 1);
  --ease-slurp: cubic-bezier(.6, 0, .9, .35);
  --ease-drip: cubic-bezier(.45, 0, .85, .25);
  --ease-glide: cubic-bezier(.2, .8, .2, 1);
  --ease-ooze: cubic-bezier(.65, 0, .35, 1);
  --ease-linear: linear;
  --t-press: 90ms;
  --t-release: 120ms;
  --t-hover-in: 180ms;
  --t-hover-out: 240ms;
  --t-focus-ring-in: 120ms;
  --t-tooltip-delay: 500ms;
  --t-tooltip-in: 120ms;
  --t-sticker-wiggle: 300ms;
  --t-play-pill-pop: 240ms;
  --t-chip-dip: 420ms;
  --t-toast-in: 240ms;
  --t-toast-out: 200ms;
  --t-toast-auto-hide: 6000ms;
  --t-sheet: 220ms;
  --t-dock-hide: 180ms;
  --t-card-punch-drop: 90ms;
  --t-card-punch-splat: 220ms;
  --t-card-punch-settle: 420ms;
  --t-card-popcorn-stagger: 80ms;
  --t-card-close: 260ms;
  --t-hero-rotation-close: 260ms;
  --t-hero-rotation-open: 510ms;
  --t-hero-rotation-auto: 12000ms;
  --t-hop-first: 1200ms;
  --t-hop-repeat: 800ms;
  --t-hop-back: 800ms;
  --t-hop-card-first: 900ms;
  --t-hop-card-repeat: 700ms;
  --t-hop-reduced: 150ms;
  --t-hop-deep-link: 500ms;
  --t-loader-delay: 300ms;
  --t-iframe-fade: 150ms;
  --t-game-timeout: 12000ms;
  --t-topbar-drop: 450ms;
  --t-drips-retract-after: 1200ms;
  --t-drips-retract: 400ms;
  --t-live-blink: 1200ms;
  --t-live-blink-hover: 600ms;
  --t-digit-roll: 300ms;
  --t-bubble-base: 2400ms;
  --t-bubble-per-char: 40ms;
  --t-bubble-pop-in: 160ms;
  --t-canvas-fade-in: 300ms;
  --t-dom-fade-on-hop: 120ms;
  --t-reduced-hop-dom-fade: 150ms;
  --t-hop-reverse-max: 400ms;
  --t-hop-back-key-after: 2000ms;
  --t-search-announce-debounce: 500ms;
  --t-focus-mode-switch: 0ms;
  --t-bar-layer-after-reveal: 1600ms;
  --t-video-retarget-idle: 250ms;
  --t-video-retarget-min-gap: 1000ms;
  --spring-jelly-k: 420;
  --spring-jelly-d: 16;
  --spring-tone-k: 90;
  --spring-tone-d: 14;
  --spring-sticky-k: 170;
  --spring-sticky-d: 12;
  --spring-crest-k: 160;
  --spring-crest-d: 8;
  --spring-camera-lambda: 5;
  --t-boil-interval: 125ms;
  --t-rim-breathe: 3.2s;
  --t-ripple-ring: 40s;
  /* z-index (DOM layers) */
  --z-game: 2;
  --z-portal-hero: 3;
  --z-nogpu: 3;
  --z-catalog-toolbar: 5;
  --z-account-shell: 6;
  --z-game-controls: 7;
  --z-focus-tab: 7;
  --z-toast: 8;
  --z-sheet-scrim: 9;
  --z-sheet: 9;
  --z-skip-link: 10;
  --z-companion-overlay: 2147483000;
  --z-birb-hit: 2147483001;
  --z-game-fx: 3;
  --z-hop-overlay: 11;
  /* breakpoints (lower bounds; for JS and docs: custom properties cannot drive @media) */
  --bp-xs: 0px;
  --bp-sm: 400px;
  --bp-md: 760px;
  --bp-lg: 1200px;
  --bp-xl: 1600px;
  /* pointer targets */
  --target-fine: 24px;
  --target-fine-preferred: 40px;
  --target-coarse: 44px;
  --target-spacing: 8px;
  /* game view */
  --bar-h: 58px;
  --goo-gutter: 14px;
  --top-bar-h: 72px;
  --focus-mode-top: 32px;
  --tab-w: 96px;
  --tab-h: 21px;
  --tab-hit-h: 24px;
  --tab-top: 8px;
  --tab-gutter: 32px;
  --landscape-tab: 44px;
}
@media (max-width: 759.98px) {
  html {
    --gutter: var(--gutter-mobile);
    --row-gap: 28px;
    --card-gap: 28px;
    --bar-h: 52px;
    --goo-gutter: 10px;
    --top-bar-h: calc(62px + env(safe-area-inset-top, 0px));
    --fs-display-hero: 42px;
    --tl-display-hero: 4px;
    --fs-display-page: 44px;
    --tl-display-page: 4px;
    --fs-display-l: 32px;
    --tl-display-l: 3px;
    --fs-display-m: 25px;
    --fs-display-m-long: 21px;
    --tl-display-m-long: 2px;
    --fs-display-s: 20px;
    --tl-display-s: 2px;
    --fs-display-key: 22px;
    --fs-bird-voice: 17px;
    --fs-body-l: 16px;
    --lh-body-l: 23px;
    --fs-body-doc: 16px;
    --lh-body-doc: 26px;
    --fs-stat: 28px;
    --fs-display-state: 22px;
    --tl-display-state: 2px;
    --fs-display-state-l: 26px;
    --tl-display-state-l: 2.5px;
    --fs-display-sub: 22px;
  }
}
@media (max-width: 759.98px), (pointer: coarse) {
  html {
    --fs-sticker: 14px;
    --fs-label: 16px;
    --fs-key: 17px;
    --fs-lcd-readout: 13px;
    --fs-live-pill: 14px;
    --fs-count: 14px;
    --fs-chart-tick: 13px;
    --fs-plate-count: 14px;
  }
}
@media (pointer: coarse) {
  html {
    --floor-info: 13px;
  }
}
/* type roles (tokens.json → type.scale). Display roles with a lip get the CSS-painted Gluten look. */
.k-t-display-hero { font-family: var(--f-display); font-weight: 800; font-size: var(--fs-display-hero); line-height: var(--lh-display-hero); --k-lip: var(--tl-display-hero); -webkit-text-stroke: var(--k-stroke, max(1.2px, .07em)) var(--ink); paint-order: stroke fill; text-shadow: 0 var(--k-lip) 0 var(--ink), .5px var(--k-lip) 0 var(--ink), -.5px var(--k-lip) 0 var(--ink), 0 calc(var(--k-lip) * .5) 0 var(--ink); }
.k-t-display-page { font-family: var(--f-display); font-weight: 800; font-size: var(--fs-display-page); line-height: var(--lh-display-page); --k-lip: var(--tl-display-page); -webkit-text-stroke: var(--k-stroke, max(1.2px, .07em)) var(--ink); paint-order: stroke fill; text-shadow: 0 var(--k-lip) 0 var(--ink), .5px var(--k-lip) 0 var(--ink), -.5px var(--k-lip) 0 var(--ink), 0 calc(var(--k-lip) * .5) 0 var(--ink); }
.k-t-display-l { font-family: var(--f-display); font-weight: 800; font-size: var(--fs-display-l); line-height: var(--lh-display-l); --k-lip: var(--tl-display-l); -webkit-text-stroke: var(--k-stroke, max(1.2px, .07em)) var(--ink); paint-order: stroke fill; text-shadow: 0 var(--k-lip) 0 var(--ink), .5px var(--k-lip) 0 var(--ink), -.5px var(--k-lip) 0 var(--ink), 0 calc(var(--k-lip) * .5) 0 var(--ink); }
.k-t-display-m { font-family: var(--f-display); font-weight: 800; font-size: var(--fs-display-m); line-height: var(--lh-display-m); --k-lip: var(--tl-display-m); -webkit-text-stroke: var(--k-stroke, max(1.2px, .07em)) var(--ink); paint-order: stroke fill; text-shadow: 0 var(--k-lip) 0 var(--ink), .5px var(--k-lip) 0 var(--ink), -.5px var(--k-lip) 0 var(--ink), 0 calc(var(--k-lip) * .5) 0 var(--ink); }
.k-t-display-m-long { font-family: var(--f-display); font-weight: 800; font-size: var(--fs-display-m-long); line-height: var(--lh-display-m-long); --k-lip: var(--tl-display-m-long); -webkit-text-stroke: var(--k-stroke, max(1.2px, .07em)) var(--ink); paint-order: stroke fill; text-shadow: 0 var(--k-lip) 0 var(--ink), .5px var(--k-lip) 0 var(--ink), -.5px var(--k-lip) 0 var(--ink), 0 calc(var(--k-lip) * .5) 0 var(--ink); }
.k-t-display-s { font-family: var(--f-display); font-weight: 800; font-size: var(--fs-display-s); line-height: var(--lh-display-s); --k-lip: var(--tl-display-s); -webkit-text-stroke: var(--k-stroke, max(1.2px, .07em)) var(--ink); paint-order: stroke fill; text-shadow: 0 var(--k-lip) 0 var(--ink), .5px var(--k-lip) 0 var(--ink), -.5px var(--k-lip) 0 var(--ink), 0 calc(var(--k-lip) * .5) 0 var(--ink); }
.k-t-display-xs { font-family: var(--f-display); font-weight: 800; font-size: var(--fs-display-xs); line-height: var(--lh-display-xs); }
.k-t-display-key { font-family: var(--f-display); font-weight: 800; font-size: var(--fs-display-key); line-height: 1.05; }
.k-t-display-pill { font-family: var(--f-display); font-weight: 800; font-size: var(--fs-display-pill); line-height: 1.05; }
.k-t-sticker { font-family: var(--f-display); font-weight: 800; font-size: var(--fs-sticker); line-height: 1.05; letter-spacing: 0.04em; text-transform: uppercase; }
.k-t-bird-voice { font-family: var(--f-display); font-weight: 600; font-size: var(--fs-bird-voice); line-height: 1.05; }
.k-t-body-l { font-family: var(--f-body); font-weight: 400; font-size: var(--fs-body-l); line-height: var(--lh-body-l); }
.k-t-body-m { font-family: var(--f-body); font-weight: 400; font-size: var(--fs-body-m); line-height: var(--lh-body-m); }
.k-t-body-doc { font-family: var(--f-body); font-weight: 400; font-size: var(--fs-body-doc); line-height: var(--lh-body-doc); }
.k-t-body-s { font-family: var(--f-body); font-weight: 400; font-size: var(--fs-body-s); line-height: var(--lh-body-s); }
.k-t-label { font-family: var(--f-body); font-weight: 600; font-size: var(--fs-label); line-height: 1.35; }
.k-t-key { font-family: var(--f-body); font-weight: 600; font-size: var(--fs-key); line-height: 1.35; }
.k-t-meta { font-family: var(--f-body); font-weight: 500; font-size: var(--fs-meta); line-height: var(--lh-meta); color: var(--text-dim); }
.k-t-caption { font-family: var(--f-body); font-weight: 600; font-size: var(--fs-caption); line-height: 1.35; color: var(--text-dim); }
.k-t-stat { font-family: var(--f-body); font-weight: 600; font-size: var(--fs-stat); line-height: 1.35; }
.k-t-lcd-input { font-family: var(--f-lcd); font-weight: 500; font-size: var(--fs-lcd-input); line-height: 1.2; color: var(--goo-3); font-variant-numeric: tabular-nums; }
.k-t-lcd-readout { font-family: var(--f-lcd); font-weight: 600; font-size: var(--fs-lcd-readout); line-height: 1.2; letter-spacing: 0.06em; text-transform: uppercase; font-variant-numeric: tabular-nums; }
.k-t-live-pill { font-family: var(--f-body); font-weight: 600; font-size: var(--fs-live-pill); line-height: 1.35; }
.k-t-count { font-family: var(--f-body); font-weight: 600; font-size: var(--fs-count); line-height: 1.35; font-variant-numeric: tabular-nums; }
.k-t-chart-tick { font-family: var(--f-body); font-weight: 500; font-size: var(--fs-chart-tick); line-height: 1.35; color: var(--text-dim); }
.k-t-display-state { font-family: var(--f-display); font-weight: 800; font-size: var(--fs-display-state); line-height: var(--lh-display-state); --k-lip: var(--tl-display-state); -webkit-text-stroke: var(--k-stroke, max(1.2px, .07em)) var(--ink); paint-order: stroke fill; text-shadow: 0 var(--k-lip) 0 var(--ink), .5px var(--k-lip) 0 var(--ink), -.5px var(--k-lip) 0 var(--ink), 0 calc(var(--k-lip) * .5) 0 var(--ink); }
.k-t-display-state-l { font-family: var(--f-display); font-weight: 800; font-size: var(--fs-display-state-l); line-height: var(--lh-display-state-l); --k-lip: var(--tl-display-state-l); -webkit-text-stroke: var(--k-stroke, max(1.2px, .07em)) var(--ink); paint-order: stroke fill; text-shadow: 0 var(--k-lip) 0 var(--ink), .5px var(--k-lip) 0 var(--ink), -.5px var(--k-lip) 0 var(--ink), 0 calc(var(--k-lip) * .5) 0 var(--ink); }
.k-t-display-sub { font-family: var(--f-display); font-weight: 700; font-size: var(--fs-display-sub); line-height: var(--lh-display-sub); }
.k-t-plate-count { font-family: var(--f-body); font-weight: 600; font-size: var(--fs-plate-count); line-height: 1.35; }
/* @generated tokens:end */

/* ------------------------------------------------------------------------------------------------
   2. Shape images (generated from the one shape source, design/src/{kit,parts}.js)
   ------------------------------------------------------------------------------------------------ */
/* @generated shapes:begin — node design/kitcss-tokens.mjs, drawn by design/src/{kit,parts}.js. Do not edit by hand. */
html {
  --k-img-drip-key: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-10.6 5 21.2 19.6' width='21.2' height='19.6'%3E%3Cdefs%3E%3Cpath id='p0' d='M-8,-9L-8,0C-4.2,0 -3,1.8 -3,5L-2.5,10.5C-2.5,13.5 -5.5,13.5 -5.5,16.5A5.5,5.5 0 0 0 5.5,16.5C5.5,13.5 2.6,13.5 2.6,10.5L3,5C3,1.8 4.3,0 8,0L8,-9Z'/%3E%3C/defs%3E%3Cg fill='%2307030D' stroke='%2307030D' stroke-width='5.2' stroke-linejoin='round'%3E%3Cuse href='%23p0'/%3E%3C/g%3E%3Cuse href='%23p0' fill='%234BEA3C'/%3E%3Cellipse cx='-2.1' cy='15.1' rx='1.2' ry='1.9' fill='%23fff' opacity='.85' transform='rotate(20 -2.1 15.1)'/%3E%3C/svg%3E"); /* primary goo key drip, from the lip edge down */
  --k-img-drip-chip: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-8.2 8.6 16.4 5.8' width='16.4' height='5.8'%3E%3Cdefs%3E%3Cpath id='p0' d='M-5.8,-9L-5.8,0C-3.2,0 -2.4,1.2 -2.4,3.4L-2,4.1C-2,6.2 -3.7,6.2 -3.7,8.3A3.7,3.7 0 0 0 3.7,8.3C3.7,6.2 2,6.2 2,4.1L2.4,3.4C2.4,1.2 3.3,0 5.8,0L5.8,-9Z'/%3E%3C/defs%3E%3Cg fill='%2307030D' stroke='%2307030D' stroke-width='4.8' stroke-linejoin='round'%3E%3Cuse href='%23p0'/%3E%3C/g%3E%3Cuse href='%23p0' fill='%234BEA3C'/%3E%3Cellipse cx='-1.4' cy='7.3' rx='0.8' ry='1.3' fill='%23fff' opacity='.85' transform='rotate(20 -1.4 7.3)'/%3E%3C/svg%3E"); /* active chip bead */
  --k-img-drip-pill: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-10.1 11 20.2 11.6' width='20.2' height='11.6'%3E%3Cdefs%3E%3Cpath id='p0' d='M-7.5,-9L-7.5,0C-4.1,0 -3,1.6 -3,4.5L-2.5,9.5C-2.5,12.3 -5,12.3 -5,15A5,5 0 0 0 5,15C5,12.3 2.6,12.3 2.6,9.5L3,4.5C3,1.6 4.1,0 7.5,0L7.5,-9Z'/%3E%3C/defs%3E%3Cg fill='%2307030D' stroke='%2307030D' stroke-width='5.2' stroke-linejoin='round'%3E%3Cuse href='%23p0'/%3E%3C/g%3E%3Cuse href='%23p0' fill='%234BEA3C'/%3E%3Cellipse cx='-1.9' cy='13.8' rx='1.1' ry='1.7' fill='%23fff' opacity='.85' transform='rotate(20 -1.9 13.8)'/%3E%3C/svg%3E"); /* Play pill bead */
  --k-img-drip-hop: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-8.4 -11.4 16.8 28.7' width='16.8' height='28.7'%3E%3Cdefs%3E%3Cpath id='p0' d='M-6,-9L-6,0C-3.3,0 -2.4,1.3 -2.4,3.6L-2,6.5C-2,8.6 -4,8.6 -4,10.9A4,4 0 0 0 4,10.9C4,8.6 2,8.6 2,6.5L2.4,3.6C2.4,1.3 3.3,0 6,0L6,-9Z'/%3E%3C/defs%3E%3Cg fill='%2307030D' stroke='%2307030D' stroke-width='4.8' stroke-linejoin='round'%3E%3Cuse href='%23p0'/%3E%3C/g%3E%3Cuse href='%23p0' fill='%234BEA3C'/%3E%3Cellipse cx='-1.5' cy='9.9' rx='0.9' ry='1.4' fill='%23fff' opacity='.85' transform='rotate(20 -1.5 9.9)'/%3E%3C/svg%3E"); /* HOP drip (drawn over the face, ink cap included) */
  --k-img-drip-well: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-8 -11.4 16 25.8' width='16' height='25.8'%3E%3Cdefs%3E%3Cpath id='p0' d='M-5.6,-9L-5.6,0C-3.2,0 -2.4,1.1 -2.4,3.2L-2,4C-2,6.1 -3.8,6.1 -3.8,8.2A3.8,3.8 0 0 0 3.8,8.2C3.8,6.1 2,6.1 2,4L2.4,3.2C2.4,1.1 3.2,0 5.6,0L5.6,-9Z'/%3E%3C/defs%3E%3Cg fill='%2307030D' stroke='%2307030D' stroke-width='4.8' stroke-linejoin='round'%3E%3Cuse href='%23p0'/%3E%3C/g%3E%3Cuse href='%23p0' fill='%234BEA3C'/%3E%3Cellipse cx='-1.4' cy='7.3' rx='0.8' ry='1.3' fill='%23fff' opacity='.85' transform='rotate(20 -1.4 7.3)'/%3E%3C/svg%3E"); /* ok well drip (drawn over the well, ink cap included) */
  --k-img-peel-pink: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-11 0 11 11' width='11' height='11'%3E%3Cpath d='M-9,1.5 L-1.5,9 L-8,8.5 Z' fill='%23FF9ACB' stroke='%2307030D' stroke-width='1.8' stroke-linejoin='round'/%3E%3C/svg%3E"); /* sticker peel (pink) */
  --k-img-peel-goo: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-11 0 11 11' width='11' height='11'%3E%3Cpath d='M-9,1.5 L-1.5,9 L-8,8.5 Z' fill='%23A6FF6B' stroke='%2307030D' stroke-width='1.8' stroke-linejoin='round'/%3E%3C/svg%3E"); /* sticker peel (goo) */
  --k-img-peel-tang: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-11 0 11 11' width='11' height='11'%3E%3Cpath d='M-9,1.5 L-1.5,9 L-8,8.5 Z' fill='%23FFC685' stroke='%2307030D' stroke-width='1.8' stroke-linejoin='round'/%3E%3C/svg%3E"); /* sticker peel (tang) */
  --k-img-peel-sky: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-11 0 11 11' width='11' height='11'%3E%3Cpath d='M-9,1.5 L-1.5,9 L-8,8.5 Z' fill='%23B5E6FF' stroke='%2307030D' stroke-width='1.8' stroke-linejoin='round'/%3E%3C/svg%3E"); /* sticker peel (sky) */
  --k-img-peel-cream: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-11 0 11 11' width='11' height='11'%3E%3Cpath d='M-9,1.5 L-1.5,9 L-8,8.5 Z' fill='%23FFFFFF' stroke='%2307030D' stroke-width='1.8' stroke-linejoin='round'/%3E%3C/svg%3E"); /* sticker peel (cream) */
  --k-img-tail: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-3.5 -6 31 28' width='31' height='28'%3E%3Cpath d='M0,-6 Q6,8 4,18 Q18,6 24,-6 Z' fill='%2307030D' stroke='%2307030D' stroke-width='6' stroke-linejoin='round' /%3E%3Cpath d='M0,-6 Q6,8 4,18 Q18,6 24,-6 Z' fill='%23FFF1D6' /%3E%3C/svg%3E"); /* bubble tail (bottom-left), 31 x 28 */
  --k-img-shout: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-16 -16 232 74' preserveAspectRatio='none'%3E%3Cpath d='M21,-5L29.8,-13L38.6,-5L47.3,-13L56.1,-5L64.9,-13L73.7,-5L82.4,-13L91.2,-5L100,-13L108.8,-5L117.6,-13L126.3,-5L135.1,-13L143.9,-5L152.7,-13L161.4,-5L170.2,-13L179,-5L187.8,-11.8L192,-1.5L203,-3L201.5,8L211.8,12.2L205,21L211.8,29.8L201.5,34L203,45L192,43.5L187.8,53.8L179,47L170.2,55L161.4,47L152.7,55L143.9,47L135.1,55L126.3,47L117.6,55L108.8,47L100,55L91.2,47L82.4,55L73.7,47L64.9,55L56.1,47L47.3,55L38.6,47L29.8,55L21,47L12.2,53.8L8,43.5L-3,45L-1.5,34L-11.8,29.8L-5,21L-11.8,12.2L-1.5,8L-3,-3L8,-1.5L12.2,-11.8Z' fill='%23FFE066' stroke='%2307030D' stroke-width='3' stroke-linejoin='round' vector-effect='non-scaling-stroke'/%3E%3C/svg%3E"); /* shout bubble body (stretched to the box + 16 px) */
  --k-img-gloss: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100' preserveAspectRatio='none'%3E%3Cpath d='M12,30 Q30,8 58,12' fill='none' stroke='%23EAFFD2' stroke-width='5' stroke-linecap='round' opacity='.22' vector-effect='non-scaling-stroke'/%3E%3C/svg%3E"); /* membrane gloss arc (stretched) */
  --k-img-hop-face: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-27 -27 54 54' width='54' height='54'%3E%3Cdefs%3E%3CclipPath id='c'%3E%3Ccircle cx='0' cy='0' r='27'/%3E%3C/clipPath%3E%3C/defs%3E%3Cg clip-path='url(%23c)'%3E%3Cpath d='M-29,16.7 A29.7,18.9 0 0 0 29,16.7 L29,31 L-29,31 Z' fill='%231C9E36'/%3E%3C/g%3E%3Cpath d='M-17.8,-8.1 A20,20 0 0 1 7.6,-18.4' fill='none' stroke='%23EAFFD2' stroke-width='3.4' stroke-linecap='round' opacity='.95'/%3E%3C/svg%3E"); /* HOP face shading for a 54 px circle */
  --k-img-tab: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-51 -3 102 27' width='102' height='27'%3E%3Cdefs%3E%3Cpath id='p0' d='M-48,0 L48,0 C42,8 22,16 0,21 C-22,16 -42,8 -48,0 Z'/%3E%3C/defs%3E%3Cg fill='%2307030D' stroke='%2307030D' stroke-width='4.8' stroke-linejoin='round'%3E%3Cuse href='%23p0'/%3E%3C/g%3E%3Cuse href='%23p0' fill='%234BEA3C'/%3E%3Cpath d='M-30,3.5 Q0,7 30,3.5' stroke='%23A6FF6B' stroke-width='2.2' fill='none' stroke-linecap='round'/%3E%3Cpath d='M-7,7 L0,13 L7,7' fill='none' stroke='%2307030D' stroke-width='2.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); /* focus-mode goo tab, 102 x 27 */
  --k-img-band: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -6 1440 22' width='1440' height='22'%3E%3Cdefs%3E%3ClinearGradient id='g' gradientUnits='userSpaceOnUse' x1='0' y1='-6' x2='0' y2='14'%3E%3Cstop offset='0' stop-color='%231C9E36'/%3E%3Cstop offset='.45' stop-color='%23136B24'/%3E%3Cstop offset='1' stop-color='%230E3A12'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cdefs%3E%3Cpath id='p0' d='M0,3.4C2.9,3.5 11.4,4 17.1,4C22.9,4.1 28.6,3.8 34.3,3.7C40,3.7 45.7,3.8 51.4,3.8C57.1,3.8 62.9,4.1 68.6,3.9C74.3,3.8 80,3.4 85.7,3C91.4,2.6 97.1,1.9 102.9,1.6C108.6,1.4 114.3,1.4 120,1.5C125.7,1.7 131.4,2.2 137.1,2.5C142.9,2.7 148.6,2.9 154.3,3C160,3.1 165.7,3 171.4,3.1C177.1,3.2 182.9,3.6 188.6,3.8C194.3,4.1 200,4.6 205.7,4.6C211.4,4.6 217.1,4.4 222.9,4C228.6,3.7 234.3,2.9 240,2.6C245.7,2.2 251.4,2 257.1,2C262.9,1.9 268.6,2.2 274.3,2.3C280,2.3 285.7,2.2 291.4,2.2C297.1,2.2 302.9,1.9 308.6,2.1C314.3,2.2 320,2.6 325.7,3C331.4,3.4 337.1,4.1 342.9,4.4C348.6,4.6 354.3,4.6 360,4.5C365.7,4.3 371.4,3.8 377.1,3.5C382.9,3.3 388.6,3.1 394.3,3C400,2.9 405.7,3 411.4,2.9C417.1,2.8 422.9,2.4 428.6,2.2C434.3,1.9 440,1.4 445.7,1.4C451.4,1.4 457.1,1.6 462.9,2C468.6,2.3 474.3,3.1 480,3.4C485.7,3.8 491.4,4 497.1,4C502.9,4.1 508.6,3.8 514.3,3.7C520,3.7 525.7,3.8 531.4,3.8C537.1,3.8 542.9,4.1 548.6,3.9C554.3,3.8 560,3.4 565.7,3C571.4,2.6 577.1,1.9 582.9,1.6C588.6,1.4 594.3,1.4 600,1.5C605.7,1.7 611.4,2.2 617.1,2.5C622.9,2.7 628.6,2.9 634.3,3C640,3.1 645.7,3 651.4,3.1C657.1,3.2 662.9,3.6 668.6,3.8C674.3,4.1 680,4.6 685.7,4.6C691.4,4.6 697.1,4.4 702.9,4C708.6,3.7 714.3,2.9 720,2.6C725.7,2.2 731.4,2 737.1,2C742.9,1.9 748.6,2.2 754.3,2.3C760,2.3 765.7,2.2 771.4,2.2C777.1,2.2 782.9,1.9 788.6,2.1C794.3,2.2 800,2.6 805.7,3C811.4,3.4 817.1,4.1 822.9,4.4C828.6,4.6 834.3,4.6 840,4.5C845.7,4.3 851.4,3.8 857.1,3.5C862.9,3.3 868.6,3.1 874.3,3C880,2.9 885.7,3 891.4,2.9C897.1,2.8 902.9,2.4 908.6,2.2C914.3,1.9 920,1.4 925.7,1.4C931.4,1.4 937.1,1.6 942.9,2C948.6,2.3 954.3,3.1 960,3.4C965.7,3.8 971.4,4 977.1,4C982.9,4.1 988.6,3.8 994.3,3.7C1000,3.7 1005.7,3.8 1011.4,3.8C1017.1,3.8 1022.9,4.1 1028.6,3.9C1034.3,3.8 1040,3.4 1045.7,3C1051.4,2.6 1057.1,1.9 1062.9,1.6C1068.6,1.4 1074.3,1.4 1080,1.5C1085.7,1.7 1091.4,2.2 1097.1,2.5C1102.9,2.7 1108.6,2.9 1114.3,3C1120,3.1 1125.7,3 1131.4,3.1C1137.1,3.2 1142.9,3.6 1148.6,3.8C1154.3,4.1 1160,4.6 1165.7,4.6C1171.4,4.6 1177.1,4.4 1182.9,4C1188.6,3.7 1194.3,2.9 1200,2.6C1205.7,2.2 1211.4,2 1217.1,2C1222.9,1.9 1228.6,2.2 1234.3,2.3C1240,2.3 1245.7,2.2 1251.4,2.2C1257.1,2.2 1262.9,1.9 1268.6,2.1C1274.3,2.2 1280,2.6 1285.7,3C1291.4,3.4 1297.1,4.1 1302.9,4.4C1308.6,4.6 1314.3,4.6 1320,4.5C1325.7,4.3 1331.4,3.8 1337.1,3.5C1342.9,3.3 1348.6,3.1 1354.3,3C1360,2.9 1365.7,3 1371.4,2.9C1377.1,2.8 1382.9,2.4 1388.6,2.2C1394.3,1.9 1400,1.4 1405.7,1.4C1411.4,1.4 1417.1,1.6 1422.9,2C1428.6,2.3 1437.1,3.2 1440,3.4 L1440,-6 L0,-6 Z'/%3E%3Cpath id='p1' d='M253.5,-7L253.5,2C256.1,2 257,3.2 257,5.5L257.3,2.7C257.3,4.4 256.2,4.4 256.2,6A3,3 0 0 0 262.2,6C262.2,4.4 261.1,4.4 261.1,2.7L261.4,5.5C261.4,3.2 262.3,2 264.9,2L264.9,-7Z'/%3E%3Cpath id='p2' d='M671.1,-7L671.1,2C673.7,2 674.6,3.2 674.6,5.5L674.9,4.7C674.9,6.4 673.8,6.4 673.8,8A3,3 0 0 0 679.8,8C679.8,6.4 678.7,6.4 678.7,4.7L679,5.5C679,3.2 679.9,2 682.5,2L682.5,-7Z'/%3E%3Cpath id='p3' d='M1016.7,-7L1016.7,2C1019.3,2 1020.2,3.2 1020.2,5.5L1020.5,1.7C1020.5,3.4 1019.4,3.4 1019.4,5A3,3 0 0 0 1025.4,5C1025.4,3.4 1024.3,3.4 1024.3,1.7L1024.6,5.5C1024.6,3.2 1025.5,2 1028.1,2L1028.1,-7Z'/%3E%3Cpath id='p4' d='M1333.5,-7L1333.5,2C1336.1,2 1337,3.2 1337,5.5L1337.3,3.7C1337.3,5.4 1336.2,5.4 1336.2,7A3,3 0 0 0 1342.2,7C1342.2,5.4 1341.1,5.4 1341.1,3.7L1341.4,5.5C1341.4,3.2 1342.3,2 1344.9,2L1344.9,-7Z'/%3E%3C/defs%3E%3Cg fill='%2307030D' stroke='%2307030D' stroke-width='5.2' stroke-linejoin='round'%3E%3Cuse href='%23p0'/%3E%3Cuse href='%23p1'/%3E%3Cuse href='%23p2'/%3E%3Cuse href='%23p3'/%3E%3Cuse href='%23p4'/%3E%3C/g%3E%3Cuse href='%23p0' fill='url(%23g)'/%3E%3Cuse href='%23p1' fill='url(%23g)'/%3E%3Cuse href='%23p2' fill='url(%23g)'/%3E%3Cuse href='%23p3' fill='url(%23g)'/%3E%3Cuse href='%23p4' fill='url(%23g)'/%3E%3Cpath d='M0,-3.5 L1440,-3.5' stroke='%23EAFFD2' stroke-width='1.4' opacity='.5'/%3E%3C/svg%3E"); /* game bar goo band tile, 1440 x 22 (repeat-x), 4 drips; top 6 px overlaps the bar */
  --k-img-band-m: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -6 390 22' width='390' height='22'%3E%3Cdefs%3E%3ClinearGradient id='g' gradientUnits='userSpaceOnUse' x1='0' y1='-6' x2='0' y2='14'%3E%3Cstop offset='0' stop-color='%231C9E36'/%3E%3Cstop offset='.45' stop-color='%23136B24'/%3E%3Cstop offset='1' stop-color='%230E3A12'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cdefs%3E%3Cpath id='p0' d='M0,3.4C2.8,3.5 11.3,3.8 17,3.9C22.6,3.9 28.3,3.6 33.9,3.6C39.6,3.6 45.2,3.9 50.9,4C56.5,4.2 62.2,4.5 67.8,4.5C73.5,4.4 79.1,3.9 84.8,3.6C90.4,3.2 96.1,2.6 101.7,2.3C107.4,2.1 113,2.2 118.7,2.2C124.3,2.2 130,2.4 135.7,2.4C141.3,2.3 147,1.9 152.6,1.8C158.3,1.7 163.9,1.5 169.6,1.6C175.2,1.8 180.9,2.4 186.5,2.8C192.2,3.1 197.8,3.6 203.5,3.8C209.1,4 214.8,3.7 220.4,3.7C226.1,3.7 231.7,3.6 237.4,3.7C243,3.8 248.7,4.3 254.3,4.3C260,4.4 265.7,4.4 271.3,4.2C277,3.9 282.6,3.2 288.3,2.9C293.9,2.5 299.6,2.2 305.2,2.1C310.9,2 316.5,2.3 322.2,2.4C327.8,2.4 333.5,2.3 339.1,2.2C344.8,2 350.4,1.6 356.1,1.6C361.7,1.5 367.4,1.8 373,2.1C378.7,2.4 387.2,3.2 390,3.4 L390,-6 L0,-6 Z'/%3E%3Cpath id='p1' d='M112,-7L112,2C114.3,2 115,3.1 115,5L115.3,1.7C115.3,3.4 114,3.4 114,5A3,3 0 0 0 120,5C120,3.4 118.7,3.4 118.7,1.7L119,5C119,3.1 119.8,2 122,2L122,-7Z'/%3E%3Cpath id='p2' d='M299.2,-7L299.2,2C301.5,2 302.2,3.1 302.2,5L302.5,1.1C302.5,2.7 301.4,2.7 301.4,4.2A2.8,2.8 0 0 0 307,4.2C307,2.7 305.9,2.7 305.9,1.1L306.2,5C306.2,3.1 307,2 309.2,2L309.2,-7Z'/%3E%3C/defs%3E%3Cg fill='%2307030D' stroke='%2307030D' stroke-width='4.8' stroke-linejoin='round'%3E%3Cuse href='%23p0'/%3E%3Cuse href='%23p1'/%3E%3Cuse href='%23p2'/%3E%3C/g%3E%3Cuse href='%23p0' fill='url(%23g)'/%3E%3Cuse href='%23p1' fill='url(%23g)'/%3E%3Cuse href='%23p2' fill='url(%23g)'/%3E%3Cpath d='M0,-3.5 L390,-3.5' stroke='%23EAFFD2' stroke-width='1.4' opacity='.5'/%3E%3C/svg%3E"); /* phone game bar goo band tile, 390 x 22 (repeat-x), 2 drips */
  --k-img-play: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0.4 -11.6 21.2 23.2' width='21.2' height='23.2'%3E%3Cpath d='M2,-10 L20,0 L2,10 Z' fill='%2307030D' stroke='%2307030D' stroke-width='3.2' stroke-linejoin='round'/%3E%3C/svg%3E"); /* ink play triangle */
  --k-img-warning: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg transform='translate(0 0) scale(1)' stroke-linejoin='round' stroke-linecap='round'%3E%3Cpath d='M12,3.6 L21.4,19.6 H2.6 Z' fill='%23FF4D5E' fill-rule='evenodd' stroke='%2307030D' stroke-width='2.3'/%3E%3Cpath d='M12,9.2 V13.6 M12,16.6 V16.7' fill='none' stroke='%2307030D' stroke-width='2.3'/%3E%3C/g%3E%3C/svg%3E"); /* field error warning icon */
  --k-img-check: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Ccircle cx='12' cy='12' r='10.5' fill='%234BEA3C' stroke='%2307030D' stroke-width='2.6'/%3E%3Cg transform='translate(2 2) scale(0.8332999999999999)' stroke-linejoin='round' stroke-linecap='round'%3E%3Cpath d='M5,12.5 L10,17.5 L19,7' fill='none' stroke='%2307030D' stroke-width='3.25'/%3E%3C/g%3E%3C/svg%3E"); /* goo check badge (selected avatar) */
  --k-img-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg transform='translate(0 0) scale(1)' stroke-linejoin='round' stroke-linecap='round'%3E%3Cpath d='M6,6 L18,18 M18,6 L6,18' fill='none' stroke='%23A898C8' stroke-width='3.25'/%3E%3C/g%3E%3C/svg%3E"); /* close x (dim, for toasts/banner when no inline icon) */
}
/* account routes (CSP img-src 'self'): the same shapes as files in /fonts/kit/ */
html.dashboard-active {
  --k-img-drip-key: url("/fonts/kit/drip-key.svg?v=3ca6008e52");
  --k-img-drip-chip: url("/fonts/kit/drip-chip.svg?v=b86122675a");
  --k-img-drip-pill: url("/fonts/kit/drip-pill.svg?v=11a0d5219a");
  --k-img-drip-hop: url("/fonts/kit/drip-hop.svg?v=770587bf72");
  --k-img-drip-well: url("/fonts/kit/drip-well.svg?v=b73a820b90");
  --k-img-peel-pink: url("/fonts/kit/peel-pink.svg?v=a26b56f9cb");
  --k-img-peel-goo: url("/fonts/kit/peel-goo.svg?v=3f302beeea");
  --k-img-peel-tang: url("/fonts/kit/peel-tang.svg?v=8542d42ed5");
  --k-img-peel-sky: url("/fonts/kit/peel-sky.svg?v=873aab6fc1");
  --k-img-peel-cream: url("/fonts/kit/peel-cream.svg?v=353507b145");
  --k-img-tail: url("/fonts/kit/tail.svg?v=35141ce1e2");
  --k-img-shout: url("/fonts/kit/shout.svg?v=57f2c4e375");
  --k-img-gloss: url("/fonts/kit/gloss.svg?v=bf6f92d5e9");
  --k-img-hop-face: url("/fonts/kit/hop-face.svg?v=854429b6b9");
  --k-img-tab: url("/fonts/kit/tab.svg?v=c6174103a5");
  --k-img-band: url("/fonts/kit/band.svg?v=a2bdeb60cd");
  --k-img-band-m: url("/fonts/kit/band-m.svg?v=c9b2206c07");
  --k-img-play: url("/fonts/kit/play.svg?v=080259d5e6");
  --k-img-warning: url("/fonts/kit/warning.svg?v=74b9d8ad41");
  --k-img-check: url("/fonts/kit/check.svg?v=b23e6a3d02");
  --k-img-close: url("/fonts/kit/close.svg?v=89303acaab");
}
/* @generated shapes:end */

/* ------------------------------------------------------------------------------------------------
   2b. Baked CSS-theme art (generated from site/art/art.json; baked by the assets slot from the same
   shape source): card rims (9-slice), panel slop, box-art globs, the loader. --k-no-art is 1 when the
   art is missing, which turns on the CSS-only stand-ins below.
   ------------------------------------------------------------------------------------------------ */
/* @generated art:begin — node design/kitcss-tokens.mjs, from site/art/art.json (baked by the assets slot). Do not edit by hand. */
html {
  --k-no-art: 0;
  --k-art-rim-dormant: url("/art/css/card-rim-dormant.webp?v=88927ca014");
  --k-art-rim-dormant-w: 461px; --k-art-rim-dormant-h: 284px;
  --k-art-rim-awake: url("/art/css/card-rim-awake.webp?v=bb7039ef36");
  --k-art-rim-awake-w: 461px; --k-art-rim-awake-h: 284px;
  --k-art-rim-slice: 96 96 104 96; --k-art-rim-width: 48px 48px 52px 48px; --k-art-rim-inset: -24px -24px -28px -24px;
  --k-art-slop: url("/art/css/panel-slop.webp?v=3acb30cfe8");
  --k-art-slop-w: 225px; --k-art-slop-h: 65.5px;
  --k-art-slop-x: 6px; --k-art-slop-y: 12px;
  --k-art-slop-m: url("/art/css/panel-slop-m.webp?v=5fd431adbe");
  --k-art-slop-m-w: 157.5px; --k-art-slop-m-h: 65.5px;
  --k-art-slop-m-x: 5.5px; --k-art-slop-m-y: 12px;
  --k-art-glob-hero: url("/art/css/glob-hero.webp?v=576617067e");
  --k-art-glob-hero-w: 48px; --k-art-glob-hero-h: 38.5px;
  --k-art-glob-hero-x: 7.5px; --k-art-glob-hero-y: 9.5px;
  --k-art-glob-card: url("/art/css/glob-card.webp?v=4912274c31");
  --k-art-glob-card-w: 42.5px; --k-art-glob-card-h: 46px;
  --k-art-glob-card-x: 6.5px; --k-art-glob-card-y: 9px;
  --k-art-glob-compact: url("/art/css/glob-compact.webp?v=6739da9df1");
  --k-art-glob-compact-w: 31.5px; --k-art-glob-compact-h: 31.5px;
  --k-art-glob-compact-x: 6.5px; --k-art-glob-compact-y: 8px;
  --k-art-glob-phone: url("/art/css/glob-phone.webp?v=35fa92faa3");
  --k-art-glob-phone-w: 33px; --k-art-glob-phone-h: 29.5px;
  --k-art-glob-phone-x: 5px; --k-art-glob-phone-y: 7px;
  --k-art-loader: url("/art/scenes/loader-portal.webp?v=93d94dbdad");
  --k-art-loader-w: 86.5px; --k-art-loader-h: 63.5px;
  --k-art-loader-x: 44px; --k-art-loader-y: 24.5px;
  --k-art-drop: url("/art/scenes/loader-drop.webp?v=6b22afc732");
  --k-art-drop-w: 15px; --k-art-drop-h: 19px;
  --k-art-drop-x: 7.5px; --k-art-drop-y: 11.5px;
  --k-art-body-pad: url("/art/css/body-pad.webp?v=1eb358c1ca");
  --k-art-body-dock: url("/art/css/body-dock.webp?v=90238f3922");
  --k-art-body-sheet: url("/art/css/body-sheet.webp?v=3f15be9eeb");
  --k-art-body-panel: url("/art/css/body-panel.webp?v=5499b43f4f");
  --k-art-body-toast: url("/art/css/body-toast.webp?v=0ecb16cb84");
  --k-art-body-tile: url("/art/css/body-tile.webp?v=bb833f4c60");
  --k-art-body-field: url("/art/css/body-field.webp?v=7c8532d302");
  --k-art-body-tooltip: url("/art/css/body-tooltip.webp?v=f23696e1e0");
  --k-art-key-goo: url("/art/css/key-goo.webp?v=767f681318");
  --k-art-key-goo-h1: url("/art/css/key-goo-hover1.webp?v=fdf8e65158");
  --k-art-key-goo-h2: url("/art/css/key-goo-hover2.webp?v=1454c1b744");
  --k-art-key-goo-h3: url("/art/css/key-goo-hover3.webp?v=e125daf6e1");
  --k-art-key-goo-p: url("/art/css/key-goo-pressed.webp?v=c73f14a12c");
  --k-art-key-cream: url("/art/css/key-cream.webp?v=27973f27ae");
  --k-art-key-cream-h1: url("/art/css/key-cream-hover1.webp?v=fc85c35421");
  --k-art-key-cream-h2: url("/art/css/key-cream-hover2.webp?v=864eeb6a0d");
  --k-art-key-cream-h3: url("/art/css/key-cream-hover3.webp?v=454729e2ae");
  --k-art-key-cream-p: url("/art/css/key-cream-pressed.webp?v=f006cfabac");
  --k-art-key-pink: url("/art/css/key-pink.webp?v=e4ae3816c0");
  --k-art-key-pink-h1: url("/art/css/key-pink-hover1.webp?v=11868afbb3");
  --k-art-key-pink-h2: url("/art/css/key-pink-hover2.webp?v=348916a624");
  --k-art-key-pink-h3: url("/art/css/key-pink-hover3.webp?v=95d9fd230c");
  --k-art-key-pink-p: url("/art/css/key-pink-pressed.webp?v=ad20281c36");
  --k-art-key-plum: url("/art/css/key-plum.webp?v=63945ca69e");
  --k-art-key-plum-h1: url("/art/css/key-plum-hover1.webp?v=2904c3945b");
  --k-art-key-plum-h2: url("/art/css/key-plum-hover2.webp?v=37c43bc9d7");
  --k-art-key-plum-h3: url("/art/css/key-plum-hover3.webp?v=25be4e5129");
  --k-art-key-plum-p: url("/art/css/key-plum-pressed.webp?v=436afbf372");
  --k-art-key-danger: url("/art/css/key-danger.webp?v=0de48d9128");
  --k-art-key-danger-h1: url("/art/css/key-danger-hover1.webp?v=1699543661");
  --k-art-key-danger-h2: url("/art/css/key-danger-hover2.webp?v=5050180308");
  --k-art-key-danger-h3: url("/art/css/key-danger-hover3.webp?v=b282bb4a62");
  --k-art-key-danger-p: url("/art/css/key-danger-pressed.webp?v=2eb1e478ee");
  --k-art-key-disabled: url("/art/css/key-disabled.webp?v=f3fc375f26");
  --k-art-chip-plum: url("/art/css/chip-plum.webp?v=2abbc6ee8b");
  --k-art-chip-plum-h1: url("/art/css/chip-plum-hover1.webp?v=e063b27ea8");
  --k-art-chip-plum-h2: url("/art/css/chip-plum-hover2.webp?v=24cc0e6733");
  --k-art-chip-plum-h3: url("/art/css/chip-plum-hover3.webp?v=e64a82d382");
  --k-art-chip-plum-p: url("/art/css/chip-plum-pressed.webp?v=68f7d8ad55");
  --k-art-chip-goo: url("/art/css/chip-goo.webp?v=717b19da31");
  --k-art-chip-goo-h1: url("/art/css/chip-goo-hover1.webp?v=4c99c10759");
  --k-art-chip-goo-h2: url("/art/css/chip-goo-hover2.webp?v=325c7a7aa3");
  --k-art-chip-goo-h3: url("/art/css/chip-goo-hover3.webp?v=c1ab44a3e1");
  --k-art-chip-goo-p: url("/art/css/chip-goo-pressed.webp?v=4a39498c3d");
}
/* @generated art:end */

/* ------------------------------------------------------------------------------------------------
   3. Modes and derived tokens
   html[data-motion="reduce" | "full"] mirrors localStorage "aio.motion" (absent = follow the OS).
   html.mono-ready lets LCD text use Martian Mono. html.gpu-paint is the GPU handoff (section 7).
   ------------------------------------------------------------------------------------------------ */
html {
  --k-motion: 1;                                   /* 0 under reduced motion: scales every CSS motion distance */
  --k-ease-pop: var(--ease-goo-pop);               /* linear under reduced motion (no overshoot) */
  --k-disabled-face: #2A2138;                      /* UIKIT 2.1 disabled palette (not in tokens.json yet) */
  --k-disabled-lip: #140E1E;
  --k-disabled-text: #8A7DA6;
  --k-glow: rgba(109, 255, 74, .28);               /* goo-glow at 28 %: the CSS stand-in for E1/E2 light */
  --k-lit-c: rgba(166, 255, 107, .9);              /* goo-3 lit crescent over goo-5 */
  --k-shade-c: rgba(28, 158, 54, .95);             /* goo-7 shade crescent */
  --k-none: 0 0 transparent;                       /* an empty box-shadow layer */
  --k-ring: 0 0 0 var(--focus-inner-w) var(--focus-inner), 0 0 0 calc(var(--focus-inner-w) + var(--focus-outer-w)) var(--focus-outer);
  --k-scrim: rgba(12, 7, 22, .62);                 /* void-0 at 62 % (stuck pad scrim) */
  --k-toast-top: 72px;                             /* phones: toasts start below the header (set by the header owner) */
}
@media (prefers-reduced-motion: reduce) {
  html:not([data-motion="full"]) { --k-motion: 0; --k-ease-pop: linear; }
}
html[data-motion="reduce"] { --k-motion: 0; --k-ease-pop: linear; }
html.mono-ready { --f-lcd: var(--f-mono); }

/* ------------------------------------------------------------------------------------------------
   4. Utilities
   ------------------------------------------------------------------------------------------------ */
[hidden] { display: none !important; }
.k-sr { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
/* GPU text twins (DESIGN §16.1.2): .k-display = Gluten line, .k-gputext = Fredoka line. In the CSS theme
   they are ordinary text; in gpu-paint mode they go transparent with their [data-gpu] owner. */
.k-display { font-family: var(--f-display); font-weight: 800; }
.k-num { font-variant-numeric: tabular-nums; }
.k-ico { display: inline-block; flex: none; width: 24px; height: 24px; vertical-align: middle; }
.k-ico--16 { width: 16px; height: 16px; }
.k-ico--20 { width: 20px; height: 20px; }
.k-ico--40 { width: 40px; height: 40px; }
.k-ico-play { display: inline-block; flex: none; width: 18px; height: 20px; background: var(--k-img-play) center / contain no-repeat; }
.k-link { color: var(--link); font-family: var(--f-body); font-weight: 600; text-decoration: underline;
  text-decoration-thickness: 2px; text-underline-offset: 3px; border-radius: 4px; }
.k-link:hover { color: var(--goo-1); }
.k-link--cream { color: var(--link-on-cream); }
.k-link--block { display: inline-flex; align-items: center; min-height: var(--target-fine); }
.k-link:focus-visible { outline: none; box-shadow: var(--k-ring); }
.k-lcdtext { font-family: var(--f-lcd); }

/* The one focus ring (DESIGN §14): 4 px ink + 4 px goo-3 outside the painted shape. Components below
   paint it with box-shadow so it hugs their radius; this zero-specificity fallback covers any other
   focusable element (an outline, so it never replaces an existing box-shadow). Elements whose ring is
   painted elsewhere (GPU, bird canvas) set their own `outline: none`. */
:where(:focus-visible:not(iframe)) { outline: var(--focus-outer-w) solid var(--focus-outer); outline-offset: var(--focus-inner-w); }
.k-target { width: fit-content; border-radius: 10px; }
.k-target:focus { outline: none; }
.k-target:focus-visible { box-shadow: var(--k-ring); }

/* Inputs never zoom on phones: any input without an authored size is 16 px on coarse pointers. Kit
   inputs (.k-field__input, .k-lcd__input) are 16 px on every pointer (DESIGN §5 floors). */
@media (pointer: coarse) {
  :where(input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]), select, textarea) { font-size: 16px; }
}

/* ------------------------------------------------------------------------------------------------
   5. Components: the CSS theme. Straight edges (CSS can't wobble, DESIGN §15.9). A body's lip is an
   ink band below its box (+ a 1 px lip-colour line when the lip is over 6 px), as the boards draw it.
   Hover lift and press sink move the element with `transform` only; a ::after strip keeps the
   original box clickable, so the hit area never moves (DESIGN §16.1 R4).
   ------------------------------------------------------------------------------------------------ */

/* 5.1 Slab, panel (+ goo slop), stat tile, list row --------------------------------------------- */
.k-slab, .k-panel, .k-tile, .k-row {
  --k-lip: var(--lip-panel);
  --k-sh-ring: var(--k-none); --k-sh-edge: var(--k-none);
  box-sizing: border-box;
  position: relative;
  border: var(--ink-component) solid var(--ink);
  border-radius: var(--r-card);
  background: var(--void-2);
  color: var(--text);
  -webkit-font-smoothing: antialiased;
  box-shadow: inset 0 0 0 1.5px var(--void-2), inset 0 0 0 3.5px var(--rim-line), var(--k-sh-ring), var(--k-sh-edge),
    0 max(0px, calc(var(--k-lip) - 6px)) 0 var(--slab-lip), 0 var(--k-lip) 0 var(--ink), var(--shadow-float);
}
.k-slab { --k-lip: var(--lip-card); }
.k-panel { padding: 34px; }
.k-panel--flat { box-shadow: inset 0 0 0 1.5px var(--void-2), inset 0 0 0 3.5px var(--rim-line), var(--k-sh-edge), 0 max(0px, calc(var(--k-lip) - 6px)) 0 var(--slab-lip), 0 var(--k-lip) 0 var(--ink); }
/* goo slop over the top-left corner (UIKIT 20). Content starts below it: the slop never covers text. */
.k-panel--slop { padding-top: 60px; }
.k-panel--slop::before {
  content: ""; position: absolute; pointer-events: none;
  left: calc(-1 * var(--k-art-slop-x, 0px)); top: calc(-1 * var(--k-art-slop-y, 0px));
  width: var(--k-art-slop-w, 0px); height: var(--k-art-slop-h, 0px);
  background: var(--k-art-slop, none) 0 0 / 100% 100% no-repeat;
}
.k-panel--slop-s::before {
  left: calc(-1 * var(--k-art-slop-m-x, 0px)); top: calc(-1 * var(--k-art-slop-m-y, 0px));
  width: var(--k-art-slop-m-w, 0px); height: var(--k-art-slop-m-h, 0px); background-image: var(--k-art-slop-m, none);
}
.k-panel__title { margin: 0 0 8px; }
@media (max-width: 759.98px) {
  .k-panel { padding: 20px; }
  .k-panel--slop { padding-top: 52px; }
  .k-panel--slop::before {
    left: calc(-1 * var(--k-art-slop-m-x, 0px)); top: calc(-1 * var(--k-art-slop-m-y, 0px));
    width: var(--k-art-slop-m-w, 0px); height: var(--k-art-slop-m-h, 0px); background-image: var(--k-art-slop-m, none);
  }
}
.k-tile {
  --k-lip: var(--lip-tile);
  min-width: 200px; padding: 14px 16px 16px;
  border-width: var(--ink-small); border-radius: var(--r-tile); background: var(--void-3);
  box-shadow: var(--k-sh-edge), 0 var(--k-lip) 0 var(--ink);
}
.k-tile__label { display: block; margin: 0; font: 600 14px/1.2 var(--f-body); color: var(--text-dim); }
.k-tile__value { display: block; margin: 8px 0 0; font: 600 var(--fs-stat)/1.1 var(--f-body); color: var(--text-hi); }
.k-tile[aria-busy="true"] > * { color: transparent; background: var(--void-4); border-radius: 6px; }
.k-row {
  --k-lip: var(--lip-key);
  display: flex; align-items: center; gap: 16px; min-height: 64px; padding: 10px 14px;
  border-width: 2.6px; border-radius: 18px; background: var(--void-3);
  box-shadow: var(--k-sh-ring), 0 var(--k-lip) 0 var(--ink);
}
.k-row--s { --k-lip: 3px; min-height: 42px; padding: 6px 12px; border-width: 2.4px; border-radius: 12px; }
/* row parts (DESIGN §15.7: Jump back in rows, passkey rows):
   <div class="k-row"><span class="k-row__portal"><img src="/videos/knight.jpg" alt=""></span>
     <span class="k-row__main"><span class="k-row__title">Knight</span><span class="k-row__meta"><svg class="k-ico k-ico--16">clock</svg>Played 2h ago</span></span>
     <a class="k-key k-key--goo k-key--m k-key--nodrip k-row__action" href="/knight" aria-label="Play Knight"><span class="k-ico-play" aria-hidden="true"></span>Play</a></div>
   Passkey row: <svg class="k-ico"> + <span class="k-row__main k-row__main--inline"><span class="k-row__name">MacBook</span><span class="k-row__meta">added 2 days ago</span></span>
   + <button class="k-key k-key--plum k-row__action">Remove</button> (the meta wraps below the name on narrow rows). */
.k-row__portal {
  position: relative; flex: none; box-sizing: content-box; width: 94px; height: 50px; margin: 0 2px 2px 0;
  border: 5px solid transparent; border-bottom-width: 6px; border-radius: 15px;
  background: linear-gradient(#0A0616, #0A0616) padding-box, linear-gradient(180deg, var(--dormant-3), var(--dormant-5) 45%, var(--dormant-7)) border-box;
  box-shadow: 0 0 0 2.5px var(--ink);
}
.k-row__portal > img, .k-row__portal > video { display: block; width: 100%; height: 100%; object-fit: cover; border-radius: 10px; box-shadow: 0 0 0 2px var(--ink); }
.k-row__main { display: grid; gap: 5px; flex: 1 1 auto; min-width: 0; }
.k-row__title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding-bottom: 3px;
  font: 800 22px/1.05 var(--f-display); color: var(--text-hi); --k-lip: 2.5px;
  -webkit-text-stroke: max(1.2px, .07em) var(--ink); paint-order: stroke fill; text-shadow: 0 var(--k-lip) 0 var(--ink); }
.k-row__name { font: 600 17px/1.2 var(--f-body); color: var(--text-hi); }
.k-row__meta { display: inline-flex; align-items: center; gap: 6px; min-width: 0; font: 500 var(--fs-meta)/var(--lh-meta) var(--f-body); color: var(--text-dim); }
.k-row__meta > svg, .k-row__meta > .k-ico { flex: none; width: 16px; height: 16px; }
.k-row__main--inline { display: flex; flex-wrap: wrap; align-items: baseline; column-gap: 12px; row-gap: 2px; }
.k-row > .k-row__action { flex: none; margin-left: auto; }
@media (max-width: 759.98px) { .k-row__portal { width: 70px; height: 38px; } .k-row__title { font-size: 20px; } }
.k-alert {
  display: flex; align-items: center; gap: 12px; min-height: 64px; padding: 12px 16px; box-sizing: border-box;
  border: var(--ink-component) solid var(--ink); border-radius: 16px; background: var(--danger-bg);
  color: var(--text-hi); font: 600 16px/1.3 var(--f-body); box-shadow: 0 var(--lip-tile) 0 var(--ink);
}
.k-alert::before { content: ""; flex: none; width: 24px; height: 24px; background: var(--k-img-warning) center / contain no-repeat; }

/* 5.2 Keys (UIKIT 2) ------------------------------------------------------------------------------
   <a|button class="k-key k-key--goo|cream|pink|plum|danger [k-key--s|m|l|xl] [k-key--icon|round|block]">
   Size = --k-h (face height, border included). Lip = --k-lip-rest. */
.k-key, .k-jump {
  --k-h: 40px;
  --k-lip-rest: var(--lip-key);
  --k-lip: var(--k-lip-rest);
  --k-dy: 0px;
  --k-ink: var(--ink-component);
  --k-face: var(--cream);
  --k-lip-c: var(--cream-lip);
  --k-hi: #FFFFFF;
  --k-label: var(--text-ink);
  --k-sh-in: var(--k-none);
  --k-sh-ring: var(--k-none);
  --k-sh-glow: var(--k-none);
  --k-sh-edge: var(--k-none);
  position: relative;
  box-sizing: border-box;
  display: inline-flex; align-items: center; justify-content: center; gap: 10px;
  height: var(--k-h); min-width: var(--k-h);
  margin: 0; padding: 0 18px;
  border: var(--k-ink) solid var(--ink); border-radius: 999px;
  background-color: var(--k-face);
  color: var(--k-label);
  font: 600 var(--fs-key)/1 var(--f-body);
  text-decoration: none; white-space: nowrap; vertical-align: middle;
  cursor: pointer; user-select: none; -webkit-user-select: none; -webkit-tap-highlight-color: transparent;
  -webkit-font-smoothing: antialiased; appearance: none;
  box-shadow: var(--k-sh-in), var(--k-sh-ring), var(--k-sh-glow), var(--k-sh-edge),
    0 max(0px, calc(var(--k-lip) - 6px)) 0 var(--k-lip-c), 0 var(--k-lip) 0 var(--ink);
  transform: translateY(calc(var(--k-dy) * var(--k-motion)));
  transition: transform var(--t-hover-out) var(--ease-glide), box-shadow var(--t-focus-ring-in) linear;
}
/* the hit strip: the original box stays clickable while the face is lifted or sunk */
.k-key::after, .k-jump::after {
  content: ""; position: absolute; left: calc(-1 * var(--k-ink)); right: calc(-1 * var(--k-ink));
  top: calc(-1 * var(--k-ink) - max(0px, var(--k-dy)));
  bottom: calc(-1 * var(--k-ink) - max(0px, -1 * var(--k-dy)));
}
.k-key > svg, .k-key > .k-ico { flex: none; width: 24px; height: 24px; }
.k-key--s { --k-h: 32px; --k-lip-rest: var(--lip-key-s); padding: 0 12px; font-size: 15px; }
.k-key--m { --k-h: 48px; }
.k-key--l { --k-h: 56px; --k-lip-rest: var(--lip-key-l); }
.k-key--xl { --k-h: 60px; --k-lip-rest: var(--lip-key-l); padding: 0 28px; }
.k-key--block { display: flex; width: 100%; }
.k-key--icon { width: var(--k-h); padding: 0; }

/* colours */
.k-key--cream { --k-face: var(--cream); --k-lip-c: var(--cream-lip); --k-hi: #FFFFFF; --k-label: var(--text-ink); }
.k-key--pink { --k-face: var(--pink); --k-lip-c: var(--pink-lip); --k-hi: var(--pink-hi); --k-label: var(--text-ink); }
.k-key--tang { --k-face: var(--tang); --k-lip-c: var(--tang-lip); --k-hi: var(--tang-hi); --k-label: var(--text-ink); }
.k-key--sky { --k-face: var(--sky); --k-lip-c: var(--sky-lip); --k-hi: var(--sky-hi); --k-label: var(--text-ink); }
.k-key--butter { --k-face: var(--butter); --k-lip-c: var(--butter-lip); --k-hi: var(--butter-hi); --k-label: var(--text-ink); }
.k-key--danger { --k-face: var(--danger); --k-lip-c: var(--danger-lip); --k-hi: #FF9AA4; --k-label: var(--text-ink); }
.k-key--plum {
  --k-face: var(--plum); --k-lip-c: var(--plum-lip); --k-label: var(--text-hi);
  --k-sh-in: inset 0 1px 0 var(--plum), inset 0 3.4px 0 var(--k-rim, var(--plum-rim));
}
/* gloss band on cream / pink / tang / sky / butter / danger (UIKIT 2.2: 18 % of the height, 55 %) */
.k-key:not(.k-key--goo):not(.k-key--plum):not(.k-key--round)::before, .k-jump::before {
  content: ""; position: absolute; pointer-events: none; border-radius: 999px;
  left: calc(var(--k-h) * .275); right: calc(var(--k-h) * .275);
  top: 2px; height: max(4px, calc(var(--k-h) * .18)); background: var(--k-hi); opacity: .55;
}
.k-key--icon:not(.k-key--goo):not(.k-key--plum)::before { left: 26%; right: 26%; }

/* the goo material (DESIGN §7): body + lit crescent + shade crescent + shine dots + ink + goo-7 lip */
.k-key--goo, .k-key[aria-pressed="true"]:not(.k-key--nogoo), .k-key--icon[aria-checked="true"], .k-play, .k-toast__well--ok, .k-toast--ok .k-toast__well,
.k-seg__tab[aria-selected="true"], .k-chip[aria-pressed="true"], .k-chip.is-active {
  --k-face: var(--goo-5); --k-lip-c: var(--goo-7); --k-label: var(--text-ink);
  --k-lit: max(3px, calc(var(--k-h) * .1)); --k-shade: max(4px, calc(var(--k-h) * .14));
  --k-sh-in: inset 0 var(--k-lit) 0 var(--k-lit-c), inset 0 calc(-1 * var(--k-shade)) 0 var(--k-shade-c);
  --k-shine:
    radial-gradient(max(2.6px, calc(var(--k-h) * .09)) max(1.6px, calc(var(--k-h) * .055)) at calc(var(--k-h) * .45 + 4px) calc(var(--k-h) * .3), var(--goo-1) 72%, rgba(234, 255, 210, 0) 100%),
    radial-gradient(max(1.4px, calc(var(--k-h) * .035)) max(1.4px, calc(var(--k-h) * .035)) at calc(var(--k-h) * .45 + 4px + max(7px, calc(var(--k-h) * .22))) calc(var(--k-h) * .24), var(--goo-1) 60%, rgba(234, 255, 210, 0) 100%);
}
.k-key--goo, .k-key[aria-pressed="true"]:not(.k-key--nogoo), .k-key--icon[aria-checked="true"], .k-play, .k-toast__well--ok, .k-toast--ok .k-toast__well, .k-seg__tab[aria-selected="true"] {
  background-image: var(--k-shine); background-repeat: no-repeat;
}
.k-key--goo { font-family: var(--f-display); font-weight: 800; font-size: 20px; }
.k-key--goo.k-key--l { font-size: 22px; }
.k-key--goo.k-key--xl { font-size: var(--fs-display-key); }
.k-key--goo > .k-ico-play { margin-left: -4px; }
/* one drip from the lip at 84 % (UIKIT 2.1); .k-key--nodrip removes it */
.k-key--goo:not(.k-key--nodrip):not(.k-key--round)::before {
  content: ""; position: absolute; pointer-events: none;
  left: calc(84% - 10.6px); top: calc(100% + var(--k-ink) + var(--k-lip));
  width: 21.2px; height: 19.6px; background: var(--k-img-drip-key) 0 0 / 100% 100% no-repeat;
  transition: opacity var(--t-press) linear;
}

/* states */
@media (hover: hover) {
  .k-key:hover, .k-jump:hover {
    --k-dy: -2px; --k-lip: calc(var(--k-lip-rest) + 2px);
    transition: transform var(--t-hover-in) var(--k-ease-pop), box-shadow var(--t-focus-ring-in) linear;
  }
  .k-key--plum:hover { --k-rim: #9A89E0; }
  .k-key--goo:hover { --k-sh-glow: 0 0 18px 3px var(--k-glow); }
}
.k-key:active, .k-jump:active {
  --k-dy: calc(var(--k-lip-rest) - var(--lip-press-sink-to)); --k-lip: var(--lip-press-sink-to);
  transition: transform var(--t-press) ease-out, box-shadow var(--t-press) ease-out;
}
.k-key--goo:active::before { opacity: 0; }
@media (hover: none) {
  .k-key, .k-jump { transition: transform var(--t-release) var(--k-ease-pop), box-shadow var(--t-focus-ring-in) linear; }
}
.k-key:focus, .k-jump:focus {
  outline: 2px solid transparent; outline-offset: 2px;
  --k-sh-ring: 0 calc(var(--k-lip) / 2) 0 calc(var(--focus-inner-w) + var(--k-lip) / 2) var(--focus-inner),
    0 calc(var(--k-lip) / 2) 0 calc(var(--focus-inner-w) + var(--focus-outer-w) + var(--k-lip) / 2) var(--focus-outer);
}
.k-key:focus:not(:focus-visible), .k-jump:focus:not(:focus-visible) { --k-sh-ring: var(--k-none); }
.k-key--goo:focus-visible { --k-sh-glow: 0 0 18px 3px var(--k-glow); }
.k-key:disabled, .k-key[aria-disabled="true"] {
  --k-face: var(--k-disabled-face); --k-lip-c: var(--k-disabled-lip); --k-label: var(--k-disabled-text);
  --k-sh-in: var(--k-none); --k-sh-glow: var(--k-none); --k-dy: 0px; --k-lip: var(--k-lip-rest);
  background-image: none; cursor: default;
}
.k-key:disabled::before, .k-key[aria-disabled="true"]::before { display: none; }
/* loading: the key keeps its label + 3 ink dots, not pressable (aria-busy="true") */
.k-key[aria-busy="true"] { cursor: progress; pointer-events: none; --k-dy: 0px; }
.k-key[aria-busy="true"]::after {
  position: static; content: ""; flex: none; width: 38px; height: 14px; margin-left: 2px;
  background: radial-gradient(circle, var(--ink) 4.2px, transparent 4.8px) 0 100% / 12px 12px no-repeat,
    radial-gradient(circle, var(--ink) 4.2px, transparent 4.8px) 13px 0 / 12px 12px no-repeat,
    radial-gradient(circle, var(--ink) 4.2px, transparent 4.8px) 26px 100% / 12px 12px no-repeat;
}

/* 5.3 HOP key and the LED (UIKIT 2.4) -------------------------------------------------------------
   <button id="hop-random" class="k-key k-key--goo k-key--round" aria-label="HOP: play a random game">HOP<span class="k-led is-on is-blink" aria-hidden="true"></span></button> */
.k-key--round {
  --k-h: 54px; --k-lip-rest: 6px;
  width: var(--k-h); padding: 0; border-radius: 50%;
  font: 900 16px/1 var(--f-display); letter-spacing: .04em;
  --k-sh-in: var(--k-none);
  background: var(--k-img-hop-face) center / 100% 100% no-repeat, var(--goo-5);
}
.k-key--round:not(.k-key--nodrip)::before {
  content: ""; position: absolute; pointer-events: none;
  left: calc(50% - var(--k-h) * .25 - 10.4px); top: calc(50% + var(--k-h) * .4 - 11.4px);
  width: 20.8px; height: 26.25px; background: var(--k-img-drip-hop) 0 0 / 100% 100% no-repeat;
}
.k-key--round:disabled, .k-key--round[aria-disabled="true"] { background: var(--k-disabled-face); }
.k-key--round.k-key--dock { --k-h: 52px; }
.k-led {
  box-sizing: border-box; display: inline-block; flex: none; width: 14px; height: 14px;
  border: 2.4px solid var(--ink); border-radius: 50%;
  background: radial-gradient(circle at 36% 34%, rgba(255, 255, 255, .4) 0 1.3px, transparent 1.7px),
    radial-gradient(circle, var(--goo-9) 0 4.1px, transparent 4.6px), var(--gadget-lip);
}
.k-led.is-on {
  background: radial-gradient(circle at 36% 34%, #fff 0 1.3px, transparent 1.7px),
    radial-gradient(circle, var(--goo-5) 0 4.1px, transparent 4.6px), var(--gadget-lip);
  box-shadow: 0 0 7px 2px var(--k-glow);
}
.k-led.is-on.is-blink { animation: k-blink var(--t-live-blink) steps(1, end) infinite; }
.k-led.is-on.is-blink.is-fast, :hover > .k-led.is-on.is-blink { animation-duration: var(--t-live-blink-hover); }
.k-key--round > .k-led { position: absolute; left: calc(50% + var(--k-h) * .39 - 10px); top: calc(50% - var(--k-h) * .36 - 10px); }

/* 5.4 Chips (UIKIT 3) -------------------------------------------------------------------------------
   <button class="k-chip" data-category="rpg" aria-pressed="false">RPG <span class="k-count">2</span></button>
   Active = aria-pressed="true" (or .is-active): goo dipped from the bottom over 420 ms, then a bead drips. */
.k-chip {
  --k-h: 40px; --k-lip-rest: var(--lip-chip); --k-lip: var(--k-lip-rest); --k-dy: 0px; --k-ink: 2.6px;
  --k-face: var(--plum); --k-sh-ring: var(--k-none); --k-sh-edge: var(--k-none);
  --k-sh-in: inset 0 1px 0 var(--plum), inset 0 3.4px 0 var(--k-rim, var(--plum-rim));
  position: relative; box-sizing: border-box; flex: none;
  display: inline-flex; align-items: center; gap: 8px;
  height: var(--k-h); margin: 0; padding: 0 13px;
  border: var(--k-ink) solid var(--ink); border-radius: 999px;
  background: linear-gradient(to top, var(--goo-5) 50%, rgba(75, 234, 60, 0) 50%) 0 0 / 100% 200% no-repeat, var(--plum);
  color: var(--text-hi); font: 600 var(--fs-label)/1 var(--f-body); white-space: nowrap;
  cursor: pointer; appearance: none; -webkit-tap-highlight-color: transparent; -webkit-font-smoothing: antialiased;
  box-shadow: var(--k-sh-in), var(--k-sh-ring), var(--k-sh-edge), 0 var(--k-lip) 0 var(--ink);
  transform: translateY(calc(var(--k-dy) * var(--k-motion)));
  transition: transform var(--t-hover-out) var(--ease-glide), box-shadow var(--t-focus-ring-in) linear,
    background-position var(--t-chip-dip) var(--ease-ooze), color var(--t-chip-dip) var(--ease-ooze);
}
.k-chip::after {
  content: ""; position: absolute; left: calc(-1 * var(--k-ink)); right: calc(-1 * var(--k-ink));
  top: calc(-1 * var(--k-ink) - max(0px, var(--k-dy))); bottom: calc(-1 * var(--k-ink) - max(0px, -1 * var(--k-dy)));
}
.k-chip::before {
  content: ""; position: absolute; pointer-events: none; left: calc(30% - 8.8px); top: calc(100% + var(--k-ink) + var(--k-lip));
  width: 17.6px; height: 5.8px; background: var(--k-img-drip-chip) 0 0 / 100% 100% no-repeat;
  opacity: 0; transform: scaleY(0); transform-origin: 50% 0;
  transition: opacity 120ms linear, transform 240ms var(--k-ease-pop);
}
.k-chip[aria-pressed="true"], .k-chip.is-active {
  background-image: var(--k-shine), linear-gradient(to top, var(--goo-5) 50%, rgba(75, 234, 60, 0) 50%);
  background-size: auto, auto, 100% 200%; background-position: 0 0, 0 0, 0 100%; background-repeat: no-repeat;
  color: var(--text-ink);
}
.k-chip[aria-pressed="true"]::before, .k-chip.is-active::before { opacity: 1; transform: none; transition-delay: var(--t-chip-dip); }
@media (hover: hover) {
  .k-chip:hover { --k-dy: -2px; --k-lip: calc(var(--k-lip-rest) + 2px); --k-rim: #9A89E0; transition-duration: var(--t-hover-in), var(--t-focus-ring-in), var(--t-chip-dip), var(--t-chip-dip); transition-timing-function: var(--k-ease-pop), linear, var(--ease-ooze), var(--ease-ooze); }
}
.k-chip:active { --k-dy: calc(var(--k-lip-rest) - var(--lip-press-sink-to)); --k-lip: var(--lip-press-sink-to); }
.k-chip:focus {
  outline: 2px solid transparent; outline-offset: 2px;
  --k-sh-ring: 0 calc(var(--k-lip) / 2) 0 calc(var(--focus-inner-w) + var(--k-lip) / 2) var(--focus-inner),
    0 calc(var(--k-lip) / 2) 0 calc(var(--focus-inner-w) + var(--focus-outer-w) + var(--k-lip) / 2) var(--focus-outer);
}
.k-chip:focus:not(:focus-visible) { --k-sh-ring: var(--k-none); }
.k-count {
  box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center; flex: none;
  min-width: 24px; height: 22px; padding: 0 6px;
  border: 2px solid var(--ink); border-radius: 999px; background: var(--pill);
  color: var(--text-hi); font: 600 var(--fs-count)/1 var(--f-body); font-variant-numeric: tabular-nums;
}
/* the chip row: a scroller whose padding keeps rings, lips and drips unclipped; .is-more-start/-end fade */
.k-chips {
  display: flex; align-items: center; gap: 10px; min-width: 0;
  overflow-x: auto; overflow-y: hidden; overscroll-behavior-x: contain; scrollbar-width: none;
  padding: 10px 12px 16px; scroll-padding-inline: 56px;
}
.k-chips::-webkit-scrollbar { display: none; }
.k-chips.is-more-end { -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 48px), transparent); mask-image: linear-gradient(to right, #000 calc(100% - 48px), transparent); }
.k-chips.is-more-start { -webkit-mask-image: linear-gradient(to left, #000 calc(100% - 48px), transparent); mask-image: linear-gradient(to left, #000 calc(100% - 48px), transparent); }
.k-chips.is-more-start.is-more-end { -webkit-mask-image: linear-gradient(to right, transparent, #000 48px, #000 calc(100% - 48px), transparent); mask-image: linear-gradient(to right, transparent, #000 48px, #000 calc(100% - 48px), transparent); }
/* the down chevron turned to point right (CSS rotate() is clockwise: -90deg turns "v" into ">"); --left points left */
.k-chips-scroll > svg { transform: rotate(-90deg); }
.k-chips-scroll--left > svg { transform: rotate(90deg); }

/* 5.5 LCD search (UIKIT 4): always a CSS body. The readout is #catalog-results (visible, aria-live).
   --k-h is a minimum, not a fixed height: the screen grows with a reader's line height and paragraph spacing
   (WCAG 1.4.12), so the input and the readout always stay inside the bezel. */
.k-lcd {
  --k-h: 38px; --k-sh-ring: var(--k-none); --k-sh-glow: var(--k-none); --k-lcd-rim: var(--plum-rim);
  position: relative; box-sizing: border-box; display: flex; align-items: center; gap: 8px; min-width: 0;
  min-height: var(--k-h); padding: 0 10px 0 9px;
  border: 2.5px solid var(--ink); border-radius: 12px;
  background: linear-gradient(rgba(255, 255, 255, .07), rgba(255, 255, 255, .07)) 6px 2px / 45% 3.5px no-repeat,
    linear-gradient(180deg, var(--lcd-top), var(--lcd) 55%, var(--lcd-bottom));
  color: var(--goo-3); font: 500 16px/1 var(--f-lcd);
  box-shadow: var(--k-sh-glow), 0 0 0 3px var(--lcd-bezel), 0 0 0 5.5px var(--ink), 0 0 0 7.5px var(--k-lcd-rim), var(--k-sh-ring);
}
.k-lcd:focus-within {
  --k-lcd-rim: var(--ink);
  --k-sh-glow: inset 0 0 12px rgba(109, 255, 74, .14);
  --k-sh-ring: 0 0 0 9.5px var(--focus-inner), 0 0 0 13.5px var(--focus-outer), 0 0 22px 12px var(--k-glow);
}
.k-lcd__icon { flex: none; width: 22px; height: 22px; }
.k-lcd__input {
  flex: 1 1 auto; min-width: 0; align-self: stretch; height: auto; margin: 0; padding: 0;
  border: 0; border-radius: 0; outline: none; background: transparent; appearance: none; -webkit-appearance: none;
  color: var(--goo-3); caret-color: var(--goo-3); font: 500 16px/1 var(--f-lcd);
  text-shadow: 0 0 3px rgba(166, 255, 107, .45);
}
.k-lcd__input::placeholder { color: rgba(166, 255, 107, .6); opacity: 1; text-shadow: none; }
.k-lcd__input::-webkit-search-cancel-button, .k-lcd__input::-webkit-search-decoration { -webkit-appearance: none; appearance: none; display: none; }
.k-lcd__kbd {
  box-sizing: border-box; display: inline-grid; place-items: center; flex: none; width: 22px; height: 22px;
  border: 1.6px solid var(--goo-8); border-radius: 6px; background: var(--lcd-grid);
  color: var(--goo-3); font: 700 13px/1 var(--f-lcd);
}
.k-lcd:focus-within .k-lcd__kbd { visibility: hidden; }
.k-lcd__clear {
  position: relative; box-sizing: border-box; display: inline-grid; place-items: center; flex: none;
  width: 22px; height: 22px; margin: 0; padding: 0;
  border: 2px solid var(--ink); border-radius: 50%; background: var(--lcd-grid);
  color: var(--goo-3); cursor: pointer; appearance: none;
}
.k-lcd__clear > svg { width: 14px; height: 14px; }
.k-lcd__clear::after { content: ""; position: absolute; inset: -3px; border-radius: 50%; }  /* 18 + 2 x 3 = 24 */
.k-lcd__clear:focus-visible { outline: none; box-shadow: var(--k-ring); }
.k-lcd__readout {
  display: flex; align-items: center; flex: none; align-self: stretch; height: auto;
  margin: 7px 0; padding: 0 0 0 10px; border-left: 2px solid var(--lcd-grid);
  color: rgba(166, 255, 107, .85); font: 600 var(--fs-lcd-readout)/1 var(--f-lcd);
  letter-spacing: .06em; text-transform: uppercase; white-space: nowrap;
}
.k-lcd--sheet { --k-h: 48px; }
.k-lcd--key {
  --k-h: 44px; width: 44px; padding: 0; justify-content: center; cursor: pointer; appearance: none; margin: 0;
}
.k-lcd--key > .k-count { position: absolute; right: -9px; top: -9px; }
.k-lcd--key:focus-visible { outline: none; --k-lcd-rim: var(--ink); --k-sh-ring: 0 0 0 9.5px var(--focus-inner), 0 0 0 13.5px var(--focus-outer); }

/* 5.6 Field (UIKIT 5): cream body, visible DOM input, 16 px on every pointer ------------------------ */
.k-field { display: grid; gap: 10px; min-width: 0; }
.k-field__label { display: block; margin: 0; font: 600 var(--fs-label)/1.2 var(--f-body); color: var(--text); }
.k-field__box {
  --k-sh-ring: var(--k-none); --k-sh-err: var(--k-none); --k-sh-edge: var(--k-none);
  position: relative; box-sizing: border-box; display: flex; align-items: center; gap: 8px;
  height: 52px; padding: 0 16px;
  border: var(--ink-component) solid var(--ink); border-radius: var(--r-field);
  background: linear-gradient(rgba(201, 179, 138, .32), rgba(201, 179, 138, .32)) 2px 1px / calc(100% - 4px) 7px no-repeat, var(--cream);
  color: var(--text-ink);
  box-shadow: var(--k-sh-err), var(--k-sh-ring), var(--k-sh-edge);
}
.k-field__box:focus-within { --k-sh-ring: var(--k-ring); }
.k-field__icon { flex: none; width: 22px; height: 22px; margin-left: -3px; color: var(--cream-lip); }
.k-field__input {
  flex: 1 1 auto; min-width: 0; height: 100%; margin: 0; padding: 0;
  border: 0; border-radius: 0; outline: none; background: transparent; appearance: none;
  color: var(--text-ink); caret-color: var(--text-ink); font: 500 16px/1.2 var(--f-body);
}
.k-field__input::placeholder { color: var(--placeholder); opacity: 1; font-weight: 400; }
.k-field__input[type="password"]:not(:placeholder-shown) { letter-spacing: .12em; }
.k-field__input:-webkit-autofill, .k-field__input:-webkit-autofill:hover, .k-field__input:-webkit-autofill:focus {
  -webkit-box-shadow: inset 0 0 0 40px var(--cream); -webkit-text-fill-color: var(--text-ink); caret-color: var(--text-ink);
  transition: background-color 600000s 0s;
}
.k-field__eye {
  display: inline-grid; place-items: center; flex: none; width: 44px; height: 44px; margin: 0 -12px 0 0; padding: 0;
  border: 0; border-radius: 10px; background: none; color: var(--ink); cursor: pointer; appearance: none;
}
.k-field__eye > svg { width: 24px; height: 24px; }
.k-field__eye:focus-visible { outline: 3px solid var(--ink); outline-offset: -5px; }
@supports selector(:has(a)) {
  .k-field__box:focus-within { --k-sh-ring: var(--k-none); }
  .k-field__box:has(.k-field__input:focus) { --k-sh-ring: var(--k-ring); }
  .k-field__eye:focus-visible { outline: none; box-shadow: var(--k-ring); }
  .k-field__box:has(.k-field__input[aria-invalid="true"]) { --k-sh-err: inset 0 0 0 1.5px var(--cream), inset 0 0 0 4.5px var(--danger); }
  .k-field:has(.k-field__input[aria-invalid="true"]) .k-field__msg { color: var(--danger); font-weight: 600; padding-left: 24px; background: var(--k-img-warning) 0 50% / 18px 18px no-repeat; }
}
.k-field--error .k-field__box { --k-sh-err: inset 0 0 0 1.5px var(--cream), inset 0 0 0 4.5px var(--danger); }
.k-field__msg { margin: 0; font: 500 14px/1.35 var(--f-body); color: var(--text-dim); }
.k-field__msg--error, .k-field--error .k-field__msg { color: var(--danger); font-weight: 600; padding-left: 24px; background: var(--k-img-warning) 0 50% / 18px 18px no-repeat; }
.k-field__input:disabled { color: var(--k-disabled-text); }
.k-field--disabled .k-field__box { background: #E6D6B8; }
.k-honeypot { position: absolute !important; left: -10000px !important; top: auto; width: 1px; height: 1px; overflow: hidden; }

/* 5.7 Segmented switch (UIKIT 6): role=tablist of role=tab buttons --------------------------------- */
.k-seg {
  --k-seg-h: 48px;
  box-sizing: border-box; display: flex; height: var(--k-seg-h); padding: 3px 3px 6px;
  border: var(--ink-component) solid var(--ink); border-radius: 999px; background: var(--void-3);
  box-shadow: 0 var(--lip-tile) 0 var(--ink);
}
.k-seg__tab {
  --k-h: calc(var(--k-seg-h, 48px) - 15px); --k-sh-ring: var(--k-none);
  position: relative; box-sizing: border-box; flex: 1 1 0; min-width: 0;
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  height: 100%; margin: 0; padding: 0 12px;
  border: 2.6px solid transparent; border-radius: 999px; background-color: transparent;
  color: var(--text); font: 600 16px/1 var(--f-body); white-space: nowrap;
  cursor: pointer; appearance: none; -webkit-tap-highlight-color: transparent;
  box-shadow: var(--k-sh-ring);
  transition: background-color var(--t-sheet) var(--ease-ooze), color var(--t-sheet) var(--ease-ooze);
}
.k-seg__tab[aria-selected="true"] {
  background-color: var(--goo-5); border-color: var(--ink); color: var(--text-ink); background-repeat: no-repeat;
  box-shadow: var(--k-sh-in), var(--k-sh-ring), 0 3px 0 var(--ink);
}
.k-seg__tab:focus { outline: 2px solid transparent; --k-sh-ring: 0 1.5px 0 5.5px var(--focus-inner), 0 1.5px 0 9.5px var(--focus-outer); }
.k-seg__tab:focus:not(:focus-visible) { --k-sh-ring: var(--k-none); }
.k-seg--s { --k-seg-h: 40px; }
.k-seg--s .k-seg__tab { font-size: 15px; }

/* 5.8 Switch (UIKIT 7): <button class="k-switch" role="switch" aria-checked="false"><span class="k-switch__track" aria-hidden="true"></span>Reduce motion</button>
   or <label class="k-switch"><input class="k-switch__input" type="checkbox" role="switch"><span class="k-switch__track" aria-hidden="true"></span>Show birb</label> */
.k-switch {
  position: relative; display: inline-flex; align-items: center; gap: 12px; min-height: var(--target-coarse);
  margin: 0; padding: 0; border: 0; background: none;
  color: var(--text); font: 600 16px/1.2 var(--f-body); text-align: left;
  cursor: pointer; appearance: none; -webkit-tap-highlight-color: transparent;
}
.k-switch__input { position: absolute; opacity: 0; width: 1px; height: 1px; margin: 0; pointer-events: none; }
.k-switch__track {
  --k-sh-ring: var(--k-none);
  position: relative; box-sizing: border-box; flex: none; width: 52px; height: 30px;
  border: 2.6px solid var(--ink); border-radius: 999px;
  background: linear-gradient(var(--plum-rim), var(--plum-rim)) 50% 1.4px / calc(100% - 16px) 2px no-repeat, var(--plum);
  box-shadow: var(--k-sh-ring), 0 3px 0 var(--ink);
  transition: background-color var(--t-hover-in) linear;
}
.k-switch__track::after {
  content: ""; position: absolute; left: .4px; top: .4px; box-sizing: border-box; width: 24px; height: 24px;
  border: 2.6px solid var(--ink); border-radius: 50%; background: var(--cream); box-shadow: 0 1.5px 0 var(--ink);
  transition: transform 180ms var(--k-ease-pop);
}
.k-switch[aria-checked="true"] .k-switch__track, [role="switch"][aria-checked="true"] > .k-switch__track, .k-switch__input:checked + .k-switch__track {
  background: radial-gradient(3.2px 2px at 13px 8px, var(--goo-1) 70%, transparent), var(--goo-5);
}
.k-switch[aria-checked="true"] .k-switch__track::after, [role="switch"][aria-checked="true"] > .k-switch__track::after, .k-switch__input:checked + .k-switch__track::after { transform: translateX(22px); }
.k-switch:focus { outline: none; }
.k-switch:focus-visible .k-switch__track, .k-switch__input:focus-visible + .k-switch__track {
  --k-sh-ring: 0 1.5px 0 5.5px var(--focus-inner), 0 1.5px 0 9.5px var(--focus-outer);
}
/* a key that holds a switch track (the hero header "Reduce motion"): <button class="k-key k-key--plum k-key--switch" role="switch" aria-checked="false"><span class="k-switch__track" aria-hidden="true"></span>Reduce motion</button>.
   The key keeps its colour; the track shows the state at the key's right end (whatever the DOM order: the label reads
   first, like the board, 206 wide); the ring goes around the key. */
.k-key--switch { padding: 0 12px 0 18px; gap: 20px; }
.k-key--switch > .k-switch__track { order: 1; width: 52px; height: 28px; }
.k-key--switch > .k-switch__track::after { width: 22px; height: 22px; }
.k-key--switch[aria-checked="true"] > .k-switch__track::after { transform: translateX(24px); }
.k-switch__desc { display: block; font: 500 13px/1.3 var(--f-body); color: var(--text-dim); }
.k-switch:disabled, .k-switch[aria-disabled="true"] { color: var(--k-disabled-text); cursor: default; }

/* 5.9 Strength tube (UIKIT 8): <div class="k-tube" data-level="1..3" style="--k-tube-fill: 20%"> */
.k-tube { display: flex; align-items: center; gap: 12px; }
.k-tube__bar {
  position: relative; box-sizing: border-box; flex: none; width: 200px; max-width: 60%; height: 16px;
  border: 2.6px solid var(--ink); border-radius: 8px; background: var(--lcd-bezel); overflow: hidden;
}
.k-tube__bar::before {
  content: ""; position: absolute; left: 1px; top: 1px; bottom: 1px; right: 1px; border-radius: 5px;
  background: linear-gradient(rgba(255, 255, 255, .45), rgba(255, 255, 255, .45)) 3px 1.5px / calc(100% - 8px) 1.6px no-repeat, var(--k-tube-c, var(--void-4));
  clip-path: inset(0 calc(100% - var(--k-fill, 0%)) 0 0 round 5px);
  transition: clip-path var(--t-chip-dip) var(--ease-ooze);
}
.k-tube__bar::after { content: ""; position: absolute; left: 4px; top: 2px; width: 40%; height: 1.6px; border-radius: 1px; background: rgba(255, 255, 255, .15); }
.k-tube__word { font: 600 14px/1 var(--f-body); color: var(--text-dim); }
.k-tube[data-level="1"] { --k-tube-c: var(--danger); --k-fill: var(--k-tube-fill, 12%); }
.k-tube[data-level="2"] { --k-tube-c: var(--warn); --k-fill: 66%; }
.k-tube[data-level="3"] { --k-tube-c: var(--goo-5); --k-fill: 100%; }
.k-tube[data-level="1"] .k-tube__word { color: var(--danger); }
.k-tube[data-level="2"] .k-tube__word { color: var(--warn); }
.k-tube[data-level="3"] .k-tube__word { color: var(--goo-3); }

/* 5.10 Live pill, ink pill (UIKIT 9, 26) --------------------------------------------------------- */
.k-pill {
  box-sizing: border-box; display: inline-flex; align-items: center; gap: 7px;
  height: 30px; padding: 0 12px 0 11px;
  border: var(--ink-small) solid var(--ink); border-radius: 999px; background: var(--pill);
  color: var(--text-hi); font: 600 var(--fs-live-pill)/1 var(--f-body); white-space: nowrap; vertical-align: middle;
  -webkit-font-smoothing: antialiased; box-shadow: 0 var(--lip-pill) 0 var(--ink);
}
.k-pill--quiet { color: var(--text-dim); padding: 0 14px; }
.k-pill--ink { height: 32px; gap: 6px; padding: 0 15px 0 10px; font-size: 14px; }
.k-pill > svg { flex: none; width: 22px; height: 22px; }
.k-pill--ink > svg, .k-pill--ink > .k-ico { color: var(--goo-3); }   /* the membrane pill's icon is a goo-3 line (UIKIT 26), as the GPU paints it */
.k-pill__dot {
  box-sizing: border-box; display: inline-block; flex: none; width: 10.8px; height: 10.8px;
  border: 1.6px solid var(--ink); border-radius: 50%;
  background: radial-gradient(circle at 32% 30%, #fff 0 1.5px, transparent 1.9px), var(--goo-5);
  box-shadow: 0 0 6px 1px var(--k-glow);
  animation: k-blink var(--t-live-blink) steps(1, end) infinite;
}
.k-pill__dot.is-still, .k-pill.is-still .k-pill__dot { animation: none; }
.is-hot .k-pill__dot, :hover > .k-pill .k-pill__dot, :hover > .k-card__window .k-pill__dot { animation-duration: var(--t-live-blink-hover); }
@media (pointer: coarse) { .k-pill { height: 32px; } }

/* 5.11 Sticker (UIKIT 10): <span class="k-sticker k-sticker--beta">Beta</span> ----------------------
   The box is the baked sticker's face incl. its ink (the GPU draws that art at its natural size): a 28 px
   face (the shape source's h) + 2.5 px ink each side = 33, radius 7 + 2.5; the die-cut line 3.5 px inside the face. */
.k-sticker {
  --k-rot: 3deg; --k-peel: var(--k-img-peel-pink);
  position: relative; box-sizing: border-box; display: inline-flex; align-items: center; flex: none;
  height: 33px; padding: 1px 11px 0;
  border: var(--ink-small) solid var(--ink); border-radius: calc(var(--r-sticker) + var(--ink-small)); background: var(--pink);
  color: var(--text-ink); font: 800 var(--fs-sticker)/1 var(--f-display); letter-spacing: .04em; text-transform: uppercase; white-space: nowrap;
  box-shadow: 0 var(--lip-sticker) 0 var(--ink);
  transform: rotate(var(--k-rot));
}
.k-sticker::before { content: ""; position: absolute; inset: 2.7px; border: 1.6px solid rgba(255, 255, 255, .55); border-radius: 5.3px; pointer-events: none; }
.k-sticker::after { content: ""; position: absolute; right: 0; top: 0; width: 11px; height: 11px; background: var(--k-peel) 0 0 / 100% 100% no-repeat; pointer-events: none; }
.k-sticker--new, .k-sticker--featured { background: var(--goo-5); --k-peel: var(--k-img-peel-goo); }
.k-sticker--hot { background: var(--tang); --k-peel: var(--k-img-peel-tang); }
.k-sticker--soon { background: var(--sky); --k-peel: var(--k-img-peel-sky); }
.k-sticker--jump { background: var(--cream); --k-peel: var(--k-img-peel-cream); }
.k-sticker--beta { background: var(--pink); --k-peel: var(--k-img-peel-pink); }
@media (hover: hover) {
  .k-card:hover .k-sticker, .k-hublink:hover .k-sticker { animation: k-wiggle var(--t-sticker-wiggle) var(--ease-glide); }
}

/* 5.12 Play pill (UIKIT 11): aria-hidden, inside a card/portal link; pops on hover/focus --------------
   It has no GPU twin: the GPU paints its own pill (paintPlayPill) with a 46 / 42 / 34 px face and the ink
   OUTSIDE it, so this box is face + 2 x 3 px ink (52 / 48 / 40) and its insides follow the same layout
   (glyph 21 px, label 47 px from the outer edge, text + 64 wide) for both painters to look the same. */
.k-play {
  --k-h: 52px;
  position: relative; box-sizing: border-box; display: inline-flex; align-items: center; gap: 10px;
  height: var(--k-h); padding: 0 14px 0 18px;
  border: var(--ink-component) solid var(--ink); border-radius: 999px; background-color: var(--goo-5);
  color: var(--text-ink); font: 800 var(--fs-display-pill)/1 var(--f-display); white-space: nowrap; pointer-events: none;
  box-shadow: var(--k-sh-in), 0 6px 0 var(--ink);
}
.k-play::before { content: ""; flex: none; width: 16px; height: 18px; background: var(--k-img-play) center / contain no-repeat; }
.k-play::after {
  content: ""; position: absolute; left: calc(70% - 10.6px); top: calc(100% + 9px);
  width: 21.2px; height: 11.6px; background: var(--k-img-drip-pill) 0 0 / 100% 100% no-repeat;
}
.k-play--s { --k-h: 48px; font-size: 16px; }
.k-play--xs { --k-h: 40px; font-size: 16px; }
.k-card .k-play, .k-hublink .k-play {
  position: absolute; left: 50%; top: 50%; opacity: 0;
  transform: translate(-50%, -50%) scale(calc(1 - .35 * var(--k-motion)));
  transition: opacity 150ms linear, transform var(--t-play-pill-pop) var(--k-ease-pop);
}
.k-card:focus-visible .k-play, .k-hublink:focus-visible .k-play, .k-card.is-awake .k-play, .k-hublink.is-awake .k-play {
  opacity: 1; transform: translate(-50%, -50%) scale(1);
}
@media (hover: hover) {
  .k-card:hover .k-play, .k-hublink:hover .k-play { opacity: 1; transform: translate(-50%, -50%) scale(1); }
}
.k-card:hover .k-play, .k-card:focus-visible .k-play { box-shadow: var(--k-sh-in), 0 6px 0 var(--ink), 0 0 18px 3px var(--k-glow); }
@media (hover: none) {
  .k-hublink .k-play { position: static; opacity: 1; transform: none; }
}

/* 5.13 Jump back in pill (UIKIT 12): <a class="k-jump" href="/knight" aria-label="Jump back in: Knight">
   <span class="k-boxart k-boxart--jump"><img src="/boxart/knight.jpg" alt=""></span>
   <span class="k-jump__text"><span class="k-jump__kicker">Jump back in</span><span class="k-jump__title k-display">Knight</span></span></a> */
.k-jump { --k-h: 60px; --k-lip-rest: 6px; gap: 12px; justify-content: flex-start; padding: 0 22px 0 14px; }
.k-jump__text { display: grid; gap: 3px; min-width: 0; text-align: left; }
.k-jump__kicker { font: 600 13px/1.1 var(--f-body); color: var(--on-cream-dim); }
.k-jump__title { overflow: hidden; text-overflow: ellipsis; font: 800 19px/1.05 var(--f-display); color: var(--text-ink); }
@media (max-width: 759.98px) { .k-jump { --k-h: 56px; } }

/* 5.14 Rotation (UIKIT 13): "1 / 4" + goo bulbs + pause. Paused / stopped / reduced: .is-paused ------ */
.k-rot { display: inline-flex; align-items: center; gap: 4px; --k-rot-interval: var(--t-hero-rotation-auto); }
.k-rot__count { margin-right: 18px; font: 600 14px/1 var(--f-body); color: var(--text-dim); font-variant-numeric: tabular-nums; }
.k-rot__pause { margin-left: 16px; }
.k-bulb {
  position: relative; box-sizing: border-box; display: inline-grid; place-items: center; flex: none;
  width: var(--target-fine); height: var(--target-fine); margin: 0; padding: 0;
  border: 0; border-radius: 50%; background: none; cursor: pointer; appearance: none; -webkit-tap-highlight-color: transparent;
}
.k-bulb::before {
  --k-sh-ring: var(--k-none); --k-sh-still: var(--k-none);
  content: ""; box-sizing: border-box; width: 20px; height: 20px;
  border: 3px solid var(--ink); border-radius: 50%; background: var(--plum);
  box-shadow: inset 2px 2px 0 -.5px var(--plum-rim), var(--k-sh-ring), var(--k-sh-still), 0 3px 0 var(--ink);
}
.k-bulb::after {
  content: ""; position: absolute; left: calc(50% - 7px); top: calc(50% - 7px); width: 14px; height: 14px; border-radius: 50%;
  background: linear-gradient(var(--goo-3) 0 2px, var(--goo-5) 2px) 0 100% / 100% 0% no-repeat;
  pointer-events: none;
}
.k-bulb[aria-current="true"]::before { background: var(--goo-9); box-shadow: var(--k-sh-ring), var(--k-sh-still), 0 3px 0 var(--ink); }
.k-bulb[aria-current="true"]::after { animation: k-bulb-fill var(--k-rot-interval) linear forwards; }
.k-rot.is-paused .k-bulb[aria-current="true"]::after { animation: none; background-size: 100% 100%; background-image: radial-gradient(circle at 30% 30%, #fff 0 1.9px, transparent 2.3px), linear-gradient(var(--goo-5), var(--goo-5)); }
.k-rot.is-paused .k-bulb[aria-current="true"]::before { --k-sh-still: 0 0 0 1px var(--void-2), 0 0 0 3.4px var(--goo-3); }
.k-bulb:focus { outline: none; }
.k-bulb:focus-visible::before { --k-sh-ring: 0 1.5px 0 5.5px var(--focus-inner), 0 1.5px 0 9.5px var(--focus-outer); }

/* 5.15 Label plate (UIKIT 14): GPU text on a GPU plate; this is its CSS theme -------------------- */
.k-plate {
  box-sizing: border-box; display: inline-flex; flex-direction: column; align-items: center; gap: 6px;
  max-width: 230px; padding: 11px 17px 13px;
  border: var(--ink-small) solid var(--ink); border-radius: var(--r-tile); background: var(--pill);
  box-shadow: 0 var(--lip-tile) 0 var(--ink); text-align: center; -webkit-font-smoothing: antialiased;
}
.k-plate__title {
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; max-width: 196px;
  font: 800 var(--fs-display-xs)/1.05 var(--f-display); color: var(--text-hi);
}
.k-plate__count { display: inline-flex; align-items: center; gap: 6px; font: 600 var(--fs-plate-count)/1 var(--f-body); color: var(--text-dim); }
.k-plate__count--live { color: var(--text-hi); }
.k-plate__count .k-pill__dot { width: 9.2px; height: 9.2px; border-width: 1.4px; }
.k-hublink:hover .k-plate__title, .k-hublink:focus-visible .k-plate__title, .is-awake .k-plate__title { color: var(--goo-3); }

/* 5.16 Box art frame (UIKIT 15 / ART.md §9): <span class="k-boxart"><img src="/boxart/x.jpg" alt=""></span> */
.k-boxart {
  --k-rot: -4deg; --k-frame: 5px;
  --k-glob: var(--k-art-glob-card, none); --k-glob-w: var(--k-art-glob-card-w, 0px); --k-glob-h: var(--k-art-glob-card-h, 0px);
  --k-glob-x: var(--k-art-glob-card-x, 0px); --k-glob-y: var(--k-art-glob-card-y, 0px);
  position: relative; box-sizing: border-box; display: block; flex: none; width: 104px; height: 156px;
  border: var(--k-frame) solid var(--cream); border-radius: var(--r-box-art); background: var(--cream);
  box-shadow: 0 0 0 3px var(--ink), 0 var(--lip-box-art) 0 3px var(--ink);
  transform: rotate(var(--k-rot));
}
.k-boxart > img, .k-boxart > .k-media {
  display: block; box-sizing: border-box; width: 100%; height: 100%; object-fit: cover;
  border-radius: var(--r-box-art-inner); background: var(--void-3); box-shadow: 0 0 0 1.6px rgba(7, 3, 13, .7);
}
.k-boxart::after {
  content: ""; position: absolute; inset: 0; border-radius: var(--r-box-art-inner); pointer-events: none;
  background: linear-gradient(112deg, transparent 50%, rgba(255, 255, 255, .07) 50% 68%, transparent 68%);
}
.k-boxart::before {
  content: ""; position: absolute; z-index: 1; pointer-events: none;
  left: calc(-1 * var(--k-glob-x) - var(--k-frame)); top: calc(-1 * var(--k-glob-y) - var(--k-frame));
  width: var(--k-glob-w); height: var(--k-glob-h);
  background: var(--k-glob) 0 0 / 100% 100% no-repeat;
}
.k-boxart--hero { width: 150px; height: 225px; --k-rot: -9deg; --k-frame: 6px;
  --k-glob: var(--k-art-glob-hero, none); --k-glob-w: var(--k-art-glob-hero-w, 0px); --k-glob-h: var(--k-art-glob-hero-h, 0px); --k-glob-x: var(--k-art-glob-hero-x, 0px); --k-glob-y: var(--k-art-glob-hero-y, 0px); }
.k-boxart--compact { width: 84px; height: 126px; --k-frame: 4px;
  --k-glob: var(--k-art-glob-compact, none); --k-glob-w: var(--k-art-glob-compact-w, 0px); --k-glob-h: var(--k-art-glob-compact-h, 0px); --k-glob-x: var(--k-art-glob-compact-x, 0px); --k-glob-y: var(--k-art-glob-compact-y, 0px); }
.k-boxart--phone { width: 76px; height: 114px; --k-frame: 4px; --k-rot: -8deg;
  --k-glob: var(--k-art-glob-phone, none); --k-glob-w: var(--k-art-glob-phone-w, 0px); --k-glob-h: var(--k-art-glob-phone-h, 0px); --k-glob-x: var(--k-art-glob-phone-x, 0px); --k-glob-y: var(--k-art-glob-phone-y, 0px); }
.k-boxart--jump, .k-boxart--thumb {
  width: 32px; height: 48px; --k-frame: 3px; --k-rot: -6deg; border-radius: 6px;
  box-shadow: 0 0 0 2.4px var(--ink), 0 2px 0 2.4px var(--ink);
}
.k-boxart--thumb { width: 30px; height: 45px; --k-rot: -5deg; }
.k-boxart--jump > img, .k-boxart--thumb > img { border-radius: 3px; }
.k-boxart--jump::before, .k-boxart--thumb::before, .k-boxart--noglob::before { display: none; }
.k-boxart--flat { --k-rot: 0deg; }

/* 5.17 Card (UIKIT 16, DESIGN §15.3): the whole card is a GPU body in gpu-paint mode; this is its CSS
   theme. <a class="k-card" href="/knight" aria-label="Play Knight. Fantasy RPG, online. Beta.">
     <span class="k-card__window"><img class="k-card__media" src="/videos/knight.jpg" alt="">
       <span class="k-pill">47 plays today</span><span class="k-sticker k-sticker--beta">Beta</span>
       <span class="k-play" aria-hidden="true">Play</span></span>
     <span class="k-boxart"><img src="/boxart/knight.jpg" alt=""></span>
     <span class="k-card__body"><span class="k-card__title k-display">Knight</span>
       <span class="k-card__desc">...</span><span class="k-card__meta">fantasy RPG · online</span></span></a> */
.k-card {
  --k-lip: var(--lip-card); --k-dy: 0px; --k-sh-ring: var(--k-none); --k-art-w: 104px; --k-art-up: 58px;
  position: relative; box-sizing: border-box; display: grid; grid-template-columns: var(--k-art-w) minmax(0, 1fr);
  column-gap: 20px; align-content: start;
  padding: 12px 18px 22px 22px;
  border: var(--ink-component) solid var(--ink); border-radius: var(--r-card); background: var(--void-2);
  color: var(--text); text-decoration: none; -webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent;
  box-shadow: inset 0 0 0 1.5px var(--void-2), inset 0 0 0 3.5px var(--rim-line), var(--k-sh-ring),
    0 max(0px, calc(var(--k-lip) - 6px)) 0 var(--slab-lip), 0 var(--k-lip) 0 var(--ink), var(--shadow-float);
  transform: translateY(calc(var(--k-dy) * var(--k-free, 1)));   /* Reduce motion: the lift stays, without the spring */
  transition: transform var(--t-hover-out) var(--ease-glide), box-shadow var(--t-focus-ring-in) linear;
}
.k-card::after { content: ""; position: absolute; left: -3px; right: -3px; top: 100%; height: calc(3px + max(0px, -1 * var(--k-dy))); }
.k-card__window {
  --k-rim-c: var(--dormant-5);
  grid-column: 1 / -1; justify-self: stretch; position: relative; isolation: isolate; display: block; aspect-ratio: 16 / 9;
  margin: 0 -6px 0 -10px; border-radius: var(--r-window); background: #0A0616;
  box-shadow: 0 0 0 calc(3px * var(--k-no-art, 1)) var(--ink), 0 0 0 calc(11px * var(--k-no-art, 1)) var(--k-rim-c), 0 0 0 calc(14px * var(--k-no-art, 1)) var(--ink);
}
/* the goo rim: the baked 9-slice (art.json → css/card-rim-*.webp), drawn over the window's edge */
.k-card__window::after {
  content: ""; position: absolute; z-index: 2; pointer-events: none; box-sizing: border-box;
  inset: var(--k-art-rim-inset, 0px);
  border: solid transparent; border-width: var(--k-art-rim-width, 0px);
  border-image-source: var(--k-rim-img, var(--k-art-rim-dormant, none));
  border-image-slice: var(--k-art-rim-slice, 0); border-image-width: var(--k-art-rim-width, 0px); border-image-repeat: stretch;
}
.k-card__media, .k-card__window > img:not(.k-card__critter), .k-card__window > video {
  position: absolute; inset: 0; display: block; width: 100%; height: 100%; object-fit: cover;
  border-radius: var(--r-window); background: #0A0616;
}
.k-card__window > .k-pill { position: absolute; z-index: 3; left: 12px; top: 12px; }
.k-card__window > .k-sticker { position: absolute; z-index: 3; right: 10px; top: 10px; }
.k-card__window > .k-play { z-index: 3; }
.k-card > .k-boxart { grid-column: 1; grid-row: 2; margin-top: calc(-1 * var(--k-art-up)); }
.k-card__body { grid-column: 2; grid-row: 2; display: flex; flex-direction: column; min-width: 0; padding-top: 22px; }
.k-card__title {
  --k-lip: var(--tl-display-m);
  margin: 0; font: 800 var(--fs-display-m)/var(--lh-display-m) var(--f-display); color: var(--text-hi);
  overflow-wrap: anywhere;
  -webkit-text-stroke: max(1.2px, .07em) var(--ink); paint-order: stroke fill;
  text-shadow: 0 var(--k-lip) 0 var(--ink), .5px var(--k-lip) 0 var(--ink), -.5px var(--k-lip) 0 var(--ink);
  transition: color var(--t-hover-in) linear;
}
.k-card__title--long { font-size: var(--fs-display-m-long); }
.k-card__desc {
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  margin: 10px 0 0; font: 400 var(--fs-body-s)/var(--lh-body-s) var(--f-body); color: var(--text);
}
.k-card__meta { display: flex; align-items: center; gap: 6px; margin: 6px 0 0; font: 500 var(--fs-meta)/var(--lh-meta) var(--f-body); color: var(--text-dim); }
.k-card__meta > svg { flex: none; width: 16px; height: 16px; }
@media (hover: hover) {
  .k-card:hover { --k-dy: -8px; --k-lip: var(--lip-card-hover); transition: transform var(--t-hover-in) var(--k-ease-pop), box-shadow var(--t-focus-ring-in) linear; }
}
.k-card:hover .k-card__window, .k-card:focus-visible .k-card__window, .k-card.is-awake .k-card__window {
  --k-rim-c: var(--goo-5); --k-rim-img: var(--k-art-rim-awake, none);
}
.k-card:hover .k-card__title, .k-card:focus-visible .k-card__title, .k-card.is-awake .k-card__title { color: var(--goo-3); }
.k-card:active { --k-lip: 3px; }
.k-card:focus { outline: 2px solid transparent; outline-offset: 2px;
  --k-sh-ring: 0 calc(var(--k-lip) / 2) 0 calc(var(--focus-inner-w) + var(--k-lip) / 2) var(--focus-inner),
    0 calc(var(--k-lip) / 2) 0 calc(var(--focus-inner-w) + var(--focus-outer-w) + var(--k-lip) / 2) var(--focus-outer); }
.k-card:focus:not(:focus-visible) { --k-sh-ring: var(--k-none); }
/* SOON (not a link) and closed membranes */
.k-card--soon { cursor: default; }
.k-card--soon:hover { --k-dy: 0px; --k-lip: var(--lip-card); }
.k-card--soon:hover .k-card__window { --k-rim-c: var(--dormant-5); --k-rim-img: var(--k-art-rim-dormant, none); }
.k-card--soon:hover .k-card__title { color: var(--text-hi); }
.k-card--soon .k-card__media, .k-card__window--closed > img:not(.k-card__critter), .k-card__window--closed > video { opacity: .3; }
.k-card--soon .k-card__window::before, .k-card__window--closed::before {
  content: ""; position: absolute; z-index: 1; inset: 0; border-radius: var(--r-window); pointer-events: none;
  background:
    radial-gradient(4px 4px at 22% 64%, transparent 2.6px, rgba(166, 255, 107, .35) 3px, transparent 4px),
    radial-gradient(6px 6px at 74% 34%, transparent 4.4px, rgba(166, 255, 107, .3) 5px, transparent 6px),
    radial-gradient(3.5px 3.5px at 58% 76%, transparent 2.2px, rgba(166, 255, 107, .4) 2.7px, transparent 3.5px),
    var(--k-img-gloss) 0 0 / 100% 100% no-repeat,
    radial-gradient(ellipse at 50% 42%, rgba(23, 74, 32, .74), rgba(11, 42, 18, .88) 60%, rgba(4, 18, 10, .95));
}
.k-card__window > .k-pill--ink { position: absolute; left: 50%; top: 50%; z-index: 3; transform: translate(-50%, -50%); }
/* the filler card: a closed portal with sleeping Munch, aria-hidden */
.k-card--filler { background: var(--void-1); grid-template-columns: 1fr; text-align: center; cursor: default; box-shadow: inset 0 0 0 1.5px var(--void-1), inset 0 0 0 3.5px var(--rim-line), 0 max(0px, calc(var(--k-lip) - 6px)) 0 var(--slab-lip), 0 var(--k-lip) 0 var(--ink), var(--shadow-float); }
.k-card--filler:hover { --k-dy: 0px; --k-lip: var(--lip-card); }
.k-card--filler .k-card__window { margin: 0 -6px 0 -10px; }
.k-card--filler .k-card__window::before {
  content: ""; position: absolute; z-index: 1; inset: 0; border-radius: var(--r-window);
  background: radial-gradient(4px 4px at 20% 58%, transparent 2.6px, rgba(166, 255, 107, .35) 3px, transparent 4px),
    radial-gradient(5px 5px at 78% 64%, transparent 3.6px, rgba(166, 255, 107, .3) 4.1px, transparent 5px),
    var(--k-img-gloss) 0 0 / 100% 100% no-repeat,
    radial-gradient(ellipse at 50% 42%, rgba(23, 74, 32, .74), rgba(11, 42, 18, .88) 60%, rgba(4, 18, 10, .95));
}
.k-card--filler .k-card__critter, .k-card__critter { position: absolute; z-index: 1; left: 50%; bottom: 4%; width: 26%; height: auto; transform: translateX(-50%); pointer-events: none; }
.k-card--filler .k-card__body { grid-column: 1; grid-row: 2; align-items: center; padding: 30px 0 6px; }
.k-card--filler .k-card__title { font-size: var(--fs-display-state); --k-lip: 3px; }
.k-card--filler:hover .k-card__title { color: var(--text-hi); }
.k-card--filler .k-card__desc { color: var(--text-dim); text-align: center; }
@media (max-width: 759.98px) {
  .k-card { --k-art-w: 84px; --k-art-up: 44px; padding: 10px 16px 18px 16px; column-gap: 16px; }
  .k-card__window, .k-card--filler .k-card__window { margin: 0 -6px 0 -6px; }
  .k-card > .k-boxart { width: 84px; height: 126px; --k-frame: 4px;
    --k-glob: var(--k-art-glob-compact, none); --k-glob-w: var(--k-art-glob-compact-w, 0px); --k-glob-h: var(--k-art-glob-compact-h, 0px); --k-glob-x: var(--k-art-glob-compact-x, 0px); --k-glob-y: var(--k-art-glob-compact-y, 0px); }
  .k-card__title--long { font-size: var(--fs-display-m-long); }
}

/* 5.18 Portals in the CSS theme: hub links (UIKIT 17), small portals, avatar portals (UIKIT 22) --------- */
.k-hublink { position: relative; display: block; border-radius: 50%; color: inherit; text-decoration: none; -webkit-tap-highlight-color: transparent; }
.k-hublink:focus { outline: none; }
.k-hublink:focus-visible { outline: var(--focus-outer-w) solid var(--focus-outer); outline-offset: var(--focus-inner-w); box-shadow: 0 0 0 var(--focus-inner-w) var(--focus-inner); }
.k-portal {
  --k-rim: 8px;
  position: relative; box-sizing: content-box; display: block; aspect-ratio: 1.44;
  border: var(--k-rim) solid transparent; border-bottom-width: calc(var(--k-rim) * 1.5); border-radius: 50%;
  background: linear-gradient(#0A0616, #0A0616) padding-box,
    linear-gradient(180deg, var(--dormant-3), var(--dormant-5) 45%, var(--dormant-7)) border-box;
  box-shadow: 0 0 0 3px var(--ink);
}
.k-portal > img, .k-portal > video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; border-radius: 50%; box-shadow: 0 0 0 3px var(--ink); }
.k-portal--awake, a:hover > .k-portal, a:focus-visible > .k-portal {
  background: linear-gradient(#0A0616, #0A0616) padding-box, linear-gradient(180deg, var(--goo-3), var(--goo-5) 45%, var(--goo-7)) border-box;
}
.k-avatar { --k-rim: 6px; --k-av: 64px; width: var(--k-av); aspect-ratio: 1; background: linear-gradient(#0A2610, #0A2610) padding-box, linear-gradient(180deg, var(--dormant-3), var(--dormant-5) 45%, var(--dormant-7)) border-box; }
/* with the baked avatar (<img src="/art/avatars/peeper.webp" alt="">) the image carries the rim: art.json meta
   diameter 92, image 115.5 x 125.5 CSS px, portal centre at (58, 55.5) */
.k-avatar--art { --k-rim: 0px; background: none; box-shadow: none; overflow: visible; }
.k-avatar > img { position: absolute; left: calc(50% - var(--k-av) * .6304); top: calc(50% - var(--k-av) * .6033); width: calc(var(--k-av) * 1.2554); height: auto; border-radius: 0; box-shadow: none; object-fit: contain; }
button.k-avatar { margin: 0; padding: 0; cursor: pointer; appearance: none; font: inherit; color: inherit; }
.k-avatar[aria-checked="true"] { --k-rim: 9px; background: linear-gradient(#0A2610, #0A2610) padding-box, linear-gradient(var(--goo-5), var(--goo-5)) border-box; }
.k-avatar--art[aria-checked="true"] { --k-rim: 0px; background: none; box-shadow: 0 0 0 5px var(--ink), 0 0 0 11px var(--goo-5), 0 0 0 14px var(--ink); }
.k-avatar[aria-checked="true"]::after { content: ""; position: absolute; right: -14px; bottom: -14px; width: 26px; height: 26px; background: var(--k-img-check) center / contain no-repeat; }
.k-avatar:focus { outline: none; }
.k-avatar:focus-visible { box-shadow: 0 0 0 3px var(--ink), 0 0 0 7px var(--focus-inner), 0 0 0 11px var(--focus-outer); }
.k-avatar--art:focus-visible { box-shadow: 0 0 0 5px var(--ink), 0 0 0 9px var(--focus-inner), 0 0 0 13px var(--focus-outer); }
.k-avatar--art[aria-checked="true"]:focus-visible { box-shadow: 0 0 0 5px var(--ink), 0 0 0 11px var(--goo-5), 0 0 0 14px var(--ink), 0 0 0 18px var(--focus-inner), 0 0 0 22px var(--focus-outer); }
.k-art { display: block; max-width: 100%; height: auto; pointer-events: none; user-select: none; -webkit-user-select: none; }
.k-avatars { display: flex; flex-wrap: wrap; gap: 26px; }

/* 5.19 Hop pad, dock, scrim, search sheet (UIKIT 18, 32): always CSS bodies -------------------------- */
.k-pad {
  --k-sh-edge: var(--k-none);
  position: relative; box-sizing: border-box; display: flex; align-items: center; gap: 12px;
  min-height: 76px; padding: 0 44px;
  border: var(--ink-component) solid var(--ink); border-radius: 38px;
  background: linear-gradient(rgba(70, 51, 122, .8), rgba(70, 51, 122, .8)) 23px 3px / calc(100% - 46px) 5px no-repeat, var(--gadget-face);
  color: var(--text-hi); -webkit-font-smoothing: antialiased;
  box-shadow: var(--k-sh-edge), 0 max(0px, calc(var(--lip-gadget) - 6px)) 0 var(--gadget-lip), 0 var(--lip-gadget) 0 var(--ink), 0 18px 28px rgba(0, 0, 0, .45);
}
.k-pad::before, .k-pad::after, .k-screw {
  content: ""; position: absolute; top: calc(50% - 6.5px); width: 13px; height: 13px; box-sizing: border-box;
  border: 2.5px solid var(--ink); border-radius: 50%;
  background: linear-gradient(-33deg, transparent 42%, var(--ink) 42% 58%, transparent 58%), var(--screw);
}
.k-pad::before { left: 16px; }
.k-pad::after { right: 16px; }
.k-screw { position: relative; top: auto; display: inline-block; flex: none; }
.k-pad--noscrews::before, .k-pad--noscrews::after { display: none; }
.k-pad__div { flex: none; align-self: stretch; width: 5px; margin: 16px 2px 18px;
  background: linear-gradient(90deg, var(--gadget-lip) 0 3px, rgba(70, 51, 122, .7) 3px 4.5px, transparent 4.5px); border-radius: 3px; }
.k-pad__caption { font: 600 15px/1.2 var(--f-body); color: var(--text-hi); }
.k-dock {
  position: fixed; z-index: var(--z-catalog-toolbar);
  left: max(12px, calc(env(safe-area-inset-left, 0px) + 8px)); right: max(12px, calc(env(safe-area-inset-right, 0px) + 8px));
  bottom: max(12px, calc(env(safe-area-inset-bottom, 0px) + 6px));
  pointer-events: none;
}
.k-dock__body {
  --k-sh-edge: var(--k-none);
  box-sizing: border-box; display: flex; align-items: center; gap: 12px; height: 64px; padding: 0 14px 0 12px;
  border: var(--ink-component) solid var(--ink); border-radius: var(--r-dock);
  background: linear-gradient(rgba(70, 51, 122, .8), rgba(70, 51, 122, .8)) 17px 2px / calc(100% - 34px) 4px no-repeat, var(--gadget-face);
  color: var(--text-hi); pointer-events: auto;
  box-shadow: var(--k-sh-edge), 0 6px 0 var(--ink), 0 10px 28px rgba(0, 0, 0, .55);
  transition: opacity var(--t-dock-hide) linear;
}
/* .is-hidden is the CSS way to hide the dock: it slides out (180 ms) while html has no gpu-ready (no WebGPU, the boot
   frame, device loss: no frame loop drives the kit spring then). With gpu-ready drive .k-dock__body with the kit spring:
   CSS never transitions its transform then (the GPU's drips would lag behind it). Under Reduce motion .is-hidden is a
   120 ms fade in every mode. */
html:not(.gpu-ready) .k-dock__body { transition: transform var(--t-dock-hide) var(--ease-glide), opacity var(--t-dock-hide) linear; }
.k-dock.is-hidden .k-dock__body { transform: translateY(calc((100% + 30px) * var(--k-motion))); opacity: var(--k-motion); }
.k-scrim { background: var(--k-scrim); pointer-events: auto; }
.k-sheet {
  --k-sh-edge: var(--k-none);
  position: fixed; z-index: var(--z-sheet); left: 0; right: 0; top: 0; box-sizing: border-box;
  padding: max(12px, calc(env(safe-area-inset-top, 0px) + 8px)) max(16px, calc(env(safe-area-inset-right, 0px) + 8px)) 18px max(16px, calc(env(safe-area-inset-left, 0px) + 8px));
  border: var(--ink-component) solid var(--ink); border-top: 0; border-radius: 0 0 var(--r-sheet) var(--r-sheet);
  background: var(--gadget-face); color: var(--text-hi);
  box-shadow: var(--k-sh-edge), 0 2px 0 var(--gadget-lip), 0 8px 0 var(--ink), 0 18px 28px rgba(0, 0, 0, .45);
  animation: k-sheet-in var(--t-sheet) var(--ease-glide) both;
}
.k-sheet__row { display: flex; align-items: center; gap: 12px; }
.k-sheet__row > .k-lcd { flex: 1 1 auto; }
.k-sheet__readout { margin: 12px 4px 0; font: 600 14px/1.2 var(--f-body); color: var(--text-dim); }

/* 5.20 Toasts (UIKIT 23): <div class="k-toasts"> of <div class="k-toast k-toast--ok" role="status"> ------ */
.k-toasts {
  position: fixed; z-index: var(--z-toast); left: 50%; transform: translateX(-50%);
  bottom: max(24px, calc(env(safe-area-inset-bottom, 0px) + 16px));
  display: flex; flex-direction: column; align-items: center; gap: 14px; width: max-content; max-width: calc(100vw - 32px);
  pointer-events: none;
}
.k-toast {
  --k-sh-edge: var(--k-none);
  box-sizing: border-box; display: flex; align-items: center; gap: 14px; min-height: 56px; width: max-content; max-width: min(560px, calc(100vw - 32px));
  padding: 6px 6px 6px 7px; pointer-events: auto;
  border: var(--ink-component) solid var(--ink); border-radius: var(--r-toast); background: var(--toast);
  color: var(--text-hi); font: 600 16px/1.25 var(--f-body); -webkit-font-smoothing: antialiased;
  box-shadow: inset 0 0 0 1.5px var(--void-2), inset 0 0 0 3.5px var(--rim-line), var(--k-sh-edge), 0 var(--lip-toast) 0 var(--ink), var(--shadow-toast);
  animation: k-toast-in var(--t-toast-in) var(--k-ease-pop) both;
}
.k-toast.is-leaving { animation: k-toast-out var(--t-toast-out) var(--ease-slurp) both; }
.k-toast__well {
  --k-h: 38px;
  position: relative; box-sizing: border-box; display: inline-grid; place-items: center; flex: none; width: 38px; height: 38px;
  border: 2.6px solid var(--ink); border-radius: 13px; background-color: var(--sky); color: var(--ink);
}
.k-toast__well > svg { width: 24px; height: 24px; }
/* the well colour comes from the well modifier or from the toast root (.k-toast--ok | --error | --info | --offline) */
.k-toast__well--ok, .k-toast--ok .k-toast__well { background-color: var(--goo-5); box-shadow: var(--k-sh-in); }
.k-toast__well--ok::after, .k-toast--ok .k-toast__well::after { content: ""; position: absolute; left: calc(71% - 9.4px); top: calc(100% - 13.4px); width: 18.8px; height: 25.8px; background: var(--k-img-drip-well) 0 0 / 100% 100% no-repeat; pointer-events: none; }
.k-toast__well--error, .k-toast--error .k-toast__well { background-color: var(--danger); }
.k-toast__well--info, .k-toast--info .k-toast__well, .k-toast--offline .k-toast__well { background-color: var(--sky); }
.k-toast__msg { flex: 1 1 auto; min-width: 0; margin: 0 6px 0 0; }
.k-toast__close, .k-banner__close {
  display: inline-grid; place-items: center; flex: none; width: 40px; height: 40px; margin: 0; padding: 0;
  border: 0; border-radius: 12px; background: var(--k-img-close) center / 20px 20px no-repeat; color: var(--text-dim);
  cursor: pointer; appearance: none;
}
.k-toast__close:has(> svg), .k-banner__close:has(> svg) { background: none; }
.k-toast__close > svg, .k-banner__close > svg { width: 20px; height: 20px; }
.k-toast__close:hover, .k-banner__close:hover { color: var(--text-hi); }
.k-toast__close:focus-visible, .k-banner__close:focus-visible { outline: none; box-shadow: var(--k-ring); }
/* phones (the dock's query in toolbar.css, so landscape phones too): toasts start at the top below the header,
   never on the dock (DESIGN §15.11) */
@media (max-width: 759.98px), (pointer: coarse) and (max-height: 499.98px) {
  .k-toasts { bottom: auto; top: max(var(--k-toast-top), calc(env(safe-area-inset-top, 0px) + 8px)); }
}

/* 5.21 Tooltip (UIKIT 24): <div class="k-tip" role="tooltip">. Placement is JS; .k-tip--up = arrow on top.
   CSS-only reveal: wrap the control and its tip in .k-tipped. Never on touch. */
.k-tip {
  --k-sh-edge: var(--k-none);
  position: absolute; z-index: var(--z-skip-link); box-sizing: border-box; width: max-content; max-width: 260px;
  padding: 7px 12px 8px;
  border: 2.4px solid var(--ink); border-radius: var(--r-tooltip); background: var(--cream);
  color: var(--text-ink); font: 600 14px/1.25 var(--f-body); text-align: center;
  box-shadow: var(--k-sh-edge), 0 3px 0 var(--ink); pointer-events: auto;
}
.k-tip::before {
  content: ""; position: absolute; left: calc(50% - 6.5px); bottom: -8px; width: 13px; height: 13px; box-sizing: border-box;
  background: var(--cream); border: solid var(--ink); border-width: 0 2.4px 2.4px 0; border-bottom-right-radius: 3px;
  transform: rotate(45deg); box-shadow: 2px 2px 0 var(--ink);
}
.k-tip--up::before { bottom: auto; top: -8px; transform: rotate(-135deg); box-shadow: none; }
.k-tip--none::before { display: none; }
.k-tip__sub { display: block; font: 500 13px/1.3 var(--f-body); color: var(--on-cream-dim); }
.k-tip strong { font-weight: 700; }
.k-tipped { position: relative; }
.k-tipped > .k-tip { left: 50%; bottom: calc(100% + 14px); transform: translateX(-50%); opacity: 0; visibility: hidden;
  transition: opacity var(--t-tooltip-in) linear, visibility 0s linear var(--t-tooltip-in); }
.k-tipped > .k-tip--up { bottom: auto; top: calc(100% + 16px); }
@media (hover: hover) {
  .k-tipped:hover > .k-tip { opacity: 1; visibility: visible; transition-delay: var(--t-tooltip-delay), var(--t-tooltip-delay); }
}
.k-tipped:focus-within > .k-tip { opacity: 1; visibility: visible; transition-delay: 0s, 0s; }
.k-tipped.is-dismissed > .k-tip { opacity: 0; visibility: hidden; transition: none; }
@media (hover: none) { .k-tip { display: none; } }

/* 5.22 Bird bubble (UIKIT 25): drawn by the bird canvas; this is the CSS equivalent (aria-hidden) ---- */
.k-bubble {
  position: relative; box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center;
  min-height: 42px; padding: 0 16px 2px;
  border: var(--ink-component) solid var(--ink); border-radius: 999px; background: var(--cream);
  color: var(--text-ink); font: 600 var(--fs-bird-voice)/1.1 var(--f-display); white-space: nowrap;
  box-shadow: 0 4px 0 var(--ink);
}
.k-bubble::after { content: ""; position: absolute; left: 18.5px; top: calc(100% - 3px); width: 31px; height: 28px; background: var(--k-img-tail) 0 0 / 100% 100% no-repeat; }
.k-bubble--br::after { left: auto; right: 18.5px; transform: scaleX(-1); }
.k-bubble--notail::after { display: none; }
.k-bubble--shout { background: none; border: 0; box-shadow: none; padding: 0 22px; min-height: 50px; }
.k-bubble--shout::after { display: none; }
.k-bubble--shout::before { content: ""; position: absolute; inset: -12px -14px; z-index: -1; background: var(--k-img-shout) 0 0 / 100% 100% no-repeat; }
.k-bubble--shout { isolation: isolate; }

/* 5.23 Loader (UIKIT 27): always CSS (it keeps moving while the game's init blocks the main thread) ---
   <div class="k-loader" role="status"><span class="k-loader__art" aria-hidden="true"><i class="k-loader__drop"></i><i class="k-loader__drop"></i><i class="k-loader__drop"></i></span>
   <span class="k-loader__label">Opening portal...</span></div> */
.k-loader { display: inline-flex; flex-direction: column; align-items: center; gap: 14px; text-align: center; }
.k-loader__art { position: relative; display: block; width: 112px; height: 132px;
  background: var(--k-art-loader, none) calc(56px - var(--k-art-loader-x, 0px)) calc(95px - var(--k-art-loader-y, 0px)) / var(--k-art-loader-w, 0px) var(--k-art-loader-h, 0px) no-repeat; }
/* CSS stand-in without the baked art: a goo ring around a goo-9 hole */
.k-loader__art::before {
  content: ""; position: absolute; left: 16px; top: 73px; box-sizing: content-box; width: 68px; height: 32px;
  border: 6px solid transparent; border-bottom-width: 9px; border-radius: 50%; opacity: var(--k-no-art, 1);
  background: linear-gradient(var(--goo-9), var(--goo-9)) padding-box, linear-gradient(180deg, var(--goo-3), var(--goo-5) 45%, var(--goo-7)) border-box;
  box-shadow: 0 0 0 2.6px var(--ink), inset 0 0 0 2.6px var(--ink), inset 0 6px 8px rgba(0, 0, 0, .35);
}
.k-loader__drop {
  --k-x: 0px; --k-y: 0px;
  position: absolute; left: calc(56px - var(--k-art-drop-x, 7.5px) + var(--k-x)); top: calc(var(--k-y) - var(--k-art-drop-y, 11.5px));
  width: var(--k-art-drop-w, 15px); height: var(--k-art-drop-h, 19px);
  background: var(--k-art-drop, radial-gradient(circle at 50% 62%, var(--goo-5) 0 5px, var(--ink) 5.2px 6.6px, transparent 7px)) 0 0 / 100% 100% no-repeat;
  animation: k-drop-fall 900ms var(--ease-drip) infinite;
}
.k-loader__drop:nth-child(1) { --k-x: -14px; --k-y: 55px; }
.k-loader__drop:nth-child(2) { --k-x: 4px; --k-y: 33px; animation-delay: -300ms; }
.k-loader__drop:nth-child(3) { --k-x: 18px; --k-y: 9px; animation-delay: -600ms; }
.k-loader__label { font: 800 var(--fs-display-state)/var(--lh-display-state) var(--f-display); color: var(--text-hi);
  --k-lip: var(--tl-display-state); -webkit-text-stroke: max(1.2px, .07em) var(--ink); paint-order: stroke fill;
  text-shadow: 0 var(--k-lip) 0 var(--ink), .5px var(--k-lip) 0 var(--ink), -.5px var(--k-lip) 0 var(--ink); }

/* 5.24 Skip link (UIKIT 31): <a class="k-skip k-key k-key--cream" href="#all-games">Skip to games</a> -- */
.k-skip {
  position: fixed !important; z-index: var(--z-skip-link);
  left: max(16px, calc(env(safe-area-inset-left, 0px) + 8px)); top: max(16px, calc(env(safe-area-inset-top, 0px) + 8px));
}
.k-skip:not(:focus) { clip-path: inset(50%); width: 1px; height: 1px; min-width: 0; padding: 0; overflow: hidden; border-width: 0; box-shadow: none; white-space: nowrap; }

/* 5.25 Game bar + goo tab (UIKIT 19): GPU in gpu-paint mode; the CSS theme on device loss / no WebGPU -- */
.k-bar {
  position: relative; box-sizing: border-box; display: flex; align-items: center; gap: 14px;
  height: var(--bar-h); padding: 0 20px; background: var(--bar); box-shadow: inset 0 3px 0 var(--bar-strip);
  color: var(--text-hi); -webkit-font-smoothing: antialiased;
}
.k-bar::after {
  content: ""; position: absolute; left: 0; right: 0; top: calc(100% - 6px); height: calc(var(--goo-gutter) + 8px); pointer-events: none;
  background: var(--k-img-band) 0 0 / 1440px 22px repeat-x, linear-gradient(var(--void-0), var(--void-0)) 0 6px / 100% var(--goo-gutter) no-repeat;
}
@media (max-width: 759.98px) { .k-bar::after { background-image: var(--k-img-band-m), linear-gradient(var(--void-0), var(--void-0)); background-size: 390px 22px, 100% var(--goo-gutter); } }
.k-bar__title { overflow: hidden; min-width: 0; text-overflow: ellipsis; white-space: nowrap;
  font: 800 var(--fs-display-s)/1.1 var(--f-display); color: var(--text-hi); --k-lip: 2.5px;
  -webkit-text-stroke: 2.4px var(--ink); paint-order: stroke fill; text-shadow: 0 var(--k-lip) 0 var(--ink); padding-bottom: 3px; }
.k-bar__meta { font: 500 13px/1.2 var(--f-body); color: var(--text-dim); white-space: nowrap; }
.k-tab {
  position: relative; box-sizing: border-box; display: block; width: 96px; height: 24px; margin: 0; padding: 0;
  border: 0; border-radius: 0 0 48px 48px / 0 0 24px 24px;
  background: var(--k-img-tab) 50% 0 / 102px 27px no-repeat; cursor: pointer; appearance: none;
}
.k-tab:focus { outline: none; }
.k-tab:focus-visible { box-shadow: var(--k-ring); }
.k-tab--side {
  width: 44px; height: 44px; border: var(--ink-component) solid var(--ink); border-radius: 50%;
  background: var(--goo-5); box-shadow: inset 0 4px 0 var(--k-lit-c), inset 0 -6px 0 var(--k-shade-c), 0 4px 0 var(--ink);
}

/* 5.26 Dashboard: bar chart, table, LCD map frame, region list (UIKIT 28, 29) -------------------------- */
.k-chart { display: grid; gap: 12px; }
.k-bars { display: grid; grid-template-columns: max-content minmax(0, 1fr); column-gap: 14px; row-gap: 0; align-items: center; }
.k-bars__label { font: 600 14px/1 var(--f-body); color: var(--text); text-align: right; white-space: nowrap; }
.k-bars__row { display: contents; }
.k-bars__track {
  position: relative; height: 40px;
  background: repeating-linear-gradient(90deg, var(--void-4) 0 1px, transparent 1px calc(100% / var(--k-ticks, 5)));
  background-size: calc(100% - 1px) 100%;
}
.k-bars__bar {
  position: absolute; left: 0; top: 12px; height: 16px; width: calc(var(--v, 0) / var(--max, 1) * 100%); min-width: 2px;
  background: var(--goo-data); border-radius: 0 4px 4px 0; cursor: default;
}
.k-bars__bar:hover, .k-bars__bar.is-hover { background: var(--goo-data-hover); }
.k-bars__value { position: absolute; top: 13px; left: calc(var(--v, 0) / var(--max, 1) * 100% + 10px); font: 600 14px/1 var(--f-body); color: var(--text-hi); white-space: nowrap; }
.k-bars__axis { display: flex; justify-content: space-between; grid-column: 2; margin-top: 6px; font: 500 var(--fs-chart-tick)/1 var(--f-body); color: var(--text-dim); font-variant-numeric: tabular-nums; }
/* SVG charts: class the marks */
.k-svgbar { fill: var(--goo-data); }
.k-svgbar:hover, .k-svgbar.is-hover { fill: var(--goo-data-hover); }
.k-svggrid { stroke: var(--void-4); stroke-width: 1px; shape-rendering: crispEdges; }
.k-svgtick { fill: var(--text-dim); font: 500 var(--fs-chart-tick) var(--f-body); }
.k-svglabel { fill: var(--text); font: 600 14px var(--f-body); }
.k-svgvalue { fill: var(--text-hi); font: 600 14px var(--f-body); }
.k-table { width: 100%; border-collapse: separate; border-spacing: 0; font: 500 15px/1.3 var(--f-body); color: var(--text); }
.k-table caption { padding: 0 0 12px; text-align: left; font: 800 var(--fs-display-xs)/1.1 var(--f-display); color: var(--text-hi); caption-side: top; }
.k-table thead th {
  padding: 12px 10px; background: var(--void-3); color: var(--text-dim); font: 700 13px/1.2 var(--f-body); text-align: left;
  border-top: 2.4px solid var(--ink); border-bottom: 2.4px solid var(--ink);
}
.k-table thead th:first-child { padding-left: 16px; border-left: 2.4px solid var(--ink); border-radius: 12px 0 0 12px; }
.k-table thead th:last-child { padding-right: 16px; border-right: 2.4px solid var(--ink); border-radius: 0 12px 12px 0; }
.k-table tbody th, .k-table tbody td { height: 44px; padding: 0 10px; border-bottom: 1px solid var(--void-4); text-align: left; }
.k-table tbody th { padding-left: 16px; color: var(--text-hi); font-weight: 600; }
.k-table tbody td:last-child { padding-right: 16px; }
.k-table .k-num, .k-table td.k-num, .k-table th.k-num { text-align: right; font-variant-numeric: tabular-nums; }
.k-table a:not(.k-key) { color: var(--text-hi); font-weight: 600; text-decoration: none; text-decoration-thickness: 2px; text-underline-offset: 4px; border-radius: 4px; }
.k-table a:not(.k-key):hover { color: var(--goo-3); text-decoration: underline; }
.k-table a:not(.k-key):focus-visible { outline: none; text-decoration: underline; box-shadow: var(--k-ring); }
.k-lcdmap {
  position: relative; box-sizing: border-box; display: block; overflow: hidden; padding: 12px;
  border: 2.5px solid var(--ink); border-radius: 14px;
  background: linear-gradient(rgba(255, 255, 255, .07), rgba(255, 255, 255, .07)) 8px 4px / 45% 3.5px no-repeat,
    linear-gradient(180deg, var(--lcd-top), var(--lcd) 55%, var(--lcd-bottom));
  color: var(--goo-3);
  box-shadow: 0 0 0 4px var(--void-3), 0 0 0 6.5px var(--ink);
}
.k-lcdmap svg { display: block; width: 100%; height: auto; }
.k-lcdmap__land { fill: var(--lcd-land); stroke: var(--goo-8); stroke-width: 1.6px; }
.k-lcdmap__grid { stroke: var(--lcd-grid); stroke-width: 1px; fill: none; }
.k-lcdmap__path { fill: none; stroke: var(--goo-7); stroke-width: 1.6px; stroke-dasharray: 4 5; opacity: .8; animation: k-flow 1.2s linear infinite; }
.k-lcdmap__blip { fill: var(--goo-3); stroke: var(--lcd); stroke-width: 2px; }
.k-lcdmap__halo { fill: none; stroke: var(--goo-3); stroke-width: 1.4px; opacity: .45; }
.k-lcdmap__server { fill: var(--cream); stroke: var(--ink); stroke-width: 2px; }
.k-lcdmap__caption { margin: 8px 4px 0; font: 500 var(--floor-info)/1.3 var(--f-body); color: var(--goo-3); opacity: .85; }  /* 12, 13 coarse (the floor) */
.k-regions { display: grid; gap: 8px; margin: 0; padding: 0; list-style: none; }
.k-regions > li { box-sizing: border-box; display: flex; align-items: center; gap: 10px; min-height: 42px; padding: 0 14px;
  border: 2.4px solid var(--ink); border-radius: 12px; background: var(--void-3); box-shadow: 0 3px 0 var(--ink);
  font: 600 14px/1.2 var(--f-body); color: var(--text); }
.k-regions > li::before { content: ""; flex: none; width: 9px; height: 9px; border-radius: 50%; background: var(--goo-3); }
.k-regions .k-num { margin-left: auto; font-size: 15px; color: var(--text-hi); }

/* 5.27 No-WebGPU banner (UIKIT 30): <section class="k-banner" role="status"> ----------------------------- */
.k-banner {
  position: relative; box-sizing: border-box; display: flex; align-items: center; gap: 14px; min-height: 48px;
  padding: 6px max(16px, calc(env(safe-area-inset-right, 0px) + 8px)) 9px max(16px, calc(env(safe-area-inset-left, 0px) + 8px));
  background: var(--void-1); box-shadow: inset 0 -3px 0 var(--ink);
  color: var(--text-hi); font: 600 16px/1.3 var(--f-body); -webkit-font-smoothing: antialiased;
}
.k-banner__well { box-sizing: border-box; display: inline-grid; place-items: center; flex: none; width: 30px; height: 30px;
  border: 2.4px solid var(--ink); border-radius: 9px; background: var(--sky); color: var(--ink); }
.k-banner__well > svg { width: 20px; height: 20px; }
.k-banner__msg { margin: 0; flex: 0 1 auto; }
.k-banner__why { flex: 1 1 auto; min-width: 0; font: 500 13px/1.3 var(--f-body); color: var(--text-dim); }
/* optional wrapper: .k-banner__text holds the message and "Why?" as one run of text (an open "Why?" drops below) */
.k-banner__text { flex: 1 1 auto; min-width: 0; }
.k-banner__text > .k-banner__msg { display: inline; }
.k-banner__text > .k-banner__why { display: inline-block; margin-left: 10px; vertical-align: baseline; }
.k-banner__text > .k-banner__why[open] { display: block; margin-left: 0; }
.k-banner__why > summary { display: inline-flex; align-items: center; min-height: var(--target-fine); cursor: pointer; color: var(--link); font: 600 14px/1 var(--f-body); text-decoration: underline; text-decoration-thickness: 2px; text-underline-offset: 3px; border-radius: 4px; list-style: none; }
.k-banner__why > summary::-webkit-details-marker { display: none; }
.k-banner__why > summary:focus-visible { outline: none; box-shadow: var(--k-ring); }
.k-banner__why pre, .k-banner__why p { margin: 6px 0 0; white-space: pre-wrap; overflow-wrap: anywhere; font: 500 13px/1.4 var(--f-body); color: var(--text-dim); }
.k-banner__close { margin-left: auto; }

/* 5.28 Document (privacy page, DESIGN §15.8): <article class="k-panel k-panel--slop k-doc"> ------------- */
.k-doc { box-sizing: border-box; width: 100%; max-width: 768px; margin: 0 auto; padding: 60px 48px 56px; }
.k-doc__title { margin: 30px 0 18px; font: 800 var(--fs-display-page)/var(--lh-display-page) var(--f-display); color: var(--cream);
  --k-lip: var(--tl-display-page); -webkit-text-stroke: max(1.2px, .07em) var(--ink); paint-order: stroke fill;
  text-shadow: 0 var(--k-lip) 0 var(--ink), .5px var(--k-lip) 0 var(--ink), -.5px var(--k-lip) 0 var(--ink), 0 calc(var(--k-lip) * .5) 0 var(--ink); }
.k-doc .k-doc__lede { margin: 0 0 40px; font: 500 19px/1.58 var(--f-body); color: var(--text-hi); }  /* beats .k-doc p */
.k-doc h2 { display: flex; align-items: center; gap: 12px; margin: 44px 0 12px; font: 700 var(--fs-display-sub)/var(--lh-display-sub) var(--f-display); color: var(--text-hi); }
.k-doc h2 > svg { flex: none; width: 28px; height: 28px; }
.k-doc p, .k-doc li { font: 400 var(--fs-body-doc)/var(--lh-body-doc) var(--f-body); color: var(--text); }
.k-doc p { margin: 0 0 16px; }
.k-doc a:not(.k-key):not(.k-jump) { color: var(--link); text-decoration: underline; text-decoration-thickness: 2px; text-underline-offset: 3px; border-radius: 4px; }
.k-doc a:not(.k-key):not(.k-jump):hover { color: var(--goo-1); }
.k-doc a:not(.k-key):not(.k-jump):focus-visible { outline: none; box-shadow: var(--k-ring); }
@media (max-width: 759.98px) {
  .k-doc { padding: 52px 20px 40px; }
  .k-doc__title { margin-top: 24px; }
  .k-doc .k-doc__lede { font-size: 17px; }
}

/* 5.29 Overlay helpers: the hop overlay and error panel (DESIGN §11.16) --------------------------- */
.k-overlay { box-sizing: border-box; padding: env(safe-area-inset-top, 0px) env(safe-area-inset-right, 0px) env(safe-area-inset-bottom, 0px) env(safe-area-inset-left, 0px); color: var(--text-hi); font-family: var(--f-body); }
.k-inkpanel {
  box-sizing: border-box; display: grid; justify-items: center; gap: 12px; max-width: 460px; padding: 28px 28px 30px;
  border: var(--ink-component) solid var(--ink); border-radius: var(--r-card); background: var(--pill);
  color: var(--text-hi); text-align: center; box-shadow: 0 var(--lip-panel) 0 var(--ink);
}

/* ------------------------------------------------------------------------------------------------
   6. Coarse pointers: every target at least 44 x 44 (DESIGN §14), UI type at its coarse size
   ------------------------------------------------------------------------------------------------ */
@media (pointer: coarse) {
  .k-key:where(:not(.k-jump)) { --k-h: 44px; }
  .k-key--s { --k-h: 44px; }
  .k-key--m { --k-h: 52px; }
  .k-key--l { --k-h: 56px; }
  .k-key--xl { --k-h: 60px; }
  .k-key--round { --k-h: 54px; }
  .k-key--round.k-key--dock { --k-h: 52px; }
  .k-chip { --k-h: 44px; padding: 0 12px; }
  .k-chips { gap: 8px; }
  .k-bulb { width: var(--target-coarse); height: var(--target-coarse); }
  .k-rot { gap: 0; }
  .k-lcd__clear::after { inset: -13px; }  /* 18 + 2 x 13 = 44 */
  .k-toast__close, .k-banner__close { width: var(--target-coarse); height: var(--target-coarse); }
  .k-link--block, .k-banner__why > summary { min-height: var(--target-coarse); }
  .k-seg__tab::after { content: ""; position: absolute; left: 0; right: 0; top: 50%; height: var(--target-coarse); transform: translateY(-50%); }
  .k-bars__track { height: var(--target-coarse); }
  .k-bars__bar { top: 14px; }
  .k-bars__value { top: 15px; }
}

/* ------------------------------------------------------------------------------------------------
   6b. Baked wobble bodies (generated from site/art/art.json; the assets slot bakes them from the one
   shape source). Each is a 9-slice border image drawn over the CSS body above, which stays underneath
   as the fallback while the image loads. Hover swaps 3 boil frames at 8 fps (lip + 2), press shows the
   lip-2 frame; the face (the border box) never moves in the image, the CSS transform moves it. The state
   frames are warmed up through the hit strip only after load (html.mono-ready), never during first paint.
   ------------------------------------------------------------------------------------------------ */
/* @generated artrules:begin — node design/kitcss-tokens.mjs, from site/art/art.json. Do not edit by hand. */
.k-key, .k-jump { --k-bi: var(--k-art-key-cream); --k-bh1: var(--k-art-key-cream-h1); --k-bh2: var(--k-art-key-cream-h2); --k-bh3: var(--k-art-key-cream-h3); --k-bp: var(--k-art-key-cream-p); }
.k-key--cream { --k-bi: var(--k-art-key-cream); --k-bh1: var(--k-art-key-cream-h1); --k-bh2: var(--k-art-key-cream-h2); --k-bh3: var(--k-art-key-cream-h3); --k-bp: var(--k-art-key-cream-p); }
.k-key--pink { --k-bi: var(--k-art-key-pink); --k-bh1: var(--k-art-key-pink-h1); --k-bh2: var(--k-art-key-pink-h2); --k-bh3: var(--k-art-key-pink-h3); --k-bp: var(--k-art-key-pink-p); }
.k-key--plum { --k-bi: var(--k-art-key-plum); --k-bh1: var(--k-art-key-plum-h1); --k-bh2: var(--k-art-key-plum-h2); --k-bh3: var(--k-art-key-plum-h3); --k-bp: var(--k-art-key-plum-p); }
.k-key--danger { --k-bi: var(--k-art-key-danger); --k-bh1: var(--k-art-key-danger-h1); --k-bh2: var(--k-art-key-danger-h2); --k-bh3: var(--k-art-key-danger-h3); --k-bp: var(--k-art-key-danger-p); }
.k-key--goo, .k-key[aria-pressed="true"]:not(.k-key--nogoo) { --k-bi: var(--k-art-key-goo); --k-bh1: var(--k-art-key-goo-h1); --k-bh2: var(--k-art-key-goo-h2); --k-bh3: var(--k-art-key-goo-h3); --k-bp: var(--k-art-key-goo-p); }
.k-key:disabled, .k-key[aria-disabled="true"] { --k-bi: var(--k-art-key-disabled); --k-bh1: var(--k-art-key-disabled); --k-bh2: var(--k-art-key-disabled); --k-bh3: var(--k-art-key-disabled); --k-bp: var(--k-art-key-disabled); }
.k-key:not(.k-key--icon):not(.k-key--s):not(.k-key--round):not(.k-key--tang):not(.k-key--sky):not(.k-key--butter), .k-jump { border-width: 0; border-image: var(--k-bi) 58 72 68 72 fill / 29px 36px 34px 36px / 3px 3px 8px 3px; --k-sh-edge: inset 0 0 0 3px var(--ink); }
@media (hover: hover) { .k-key:not(.k-key--icon):not(.k-key--s):not(.k-key--round):not(.k-key--tang):not(.k-key--sky):not(.k-key--butter):hover, .k-jump:hover { border-image: var(--k-bh1) 58 72 72 72 fill / 29px 36px 36px 36px / 3px 3px 10px 3px; animation: k-boil calc(var(--t-boil-interval) * 3) steps(1, end) infinite; } }
.k-key:not(.k-key--icon):not(.k-key--s):not(.k-key--round):not(.k-key--tang):not(.k-key--sky):not(.k-key--butter):active, .k-jump:active { border-image: var(--k-bp) 58 72 62 72 fill / 29px 36px 31px 36px / 3px 3px 5px 3px; animation: none; }
.k-key:not(.k-key--icon):not(.k-key--s):not(.k-key--round):not(.k-key--tang):not(.k-key--sky):not(.k-key--butter):disabled, .k-jump:disabled, .k-key:not(.k-key--icon):not(.k-key--s):not(.k-key--round):not(.k-key--tang):not(.k-key--sky):not(.k-key--butter)[aria-disabled="true"], .k-jump[aria-disabled="true"] { border-image: var(--k-bi) 58 72 68 72 fill / 29px 36px 34px 36px / 3px 3px 8px 3px; animation: none; }
.k-key:not(.k-key--icon):not(.k-key--s):not(.k-key--round):not(.k-key--tang):not(.k-key--sky):not(.k-key--butter):not(.k-key--goo)::before, .k-jump::before { display: none; } /* the bake has the gloss band */
html:is(.mono-ready, :not(.portal-active):not(.dashboard-active)) .k-key:not(.k-key--icon):not(.k-key--s):not(.k-key--round):not(.k-key--tang):not(.k-key--sky):not(.k-key--butter):not([aria-busy="true"])::after, html:is(.mono-ready, :not(.portal-active):not(.dashboard-active)) .k-jump::after { background: var(--k-bp) -9999px 0 / 1px 1px no-repeat; }
@media (hover: hover) { html:is(.mono-ready, :not(.portal-active):not(.dashboard-active)) .k-key:not(.k-key--icon):not(.k-key--s):not(.k-key--round):not(.k-key--tang):not(.k-key--sky):not(.k-key--butter):not([aria-busy="true"])::after, html:is(.mono-ready, :not(.portal-active):not(.dashboard-active)) .k-jump::after { background: var(--k-bh1) -9999px 0 / 1px 1px no-repeat, var(--k-bh2) -9999px 0 / 1px 1px no-repeat, var(--k-bh3) -9999px 0 / 1px 1px no-repeat, var(--k-bp) -9999px 0 / 1px 1px no-repeat; } }
.k-chip { --k-bi: var(--k-art-chip-plum); --k-bh1: var(--k-art-chip-plum-h1); --k-bh2: var(--k-art-chip-plum-h2); --k-bh3: var(--k-art-chip-plum-h3); --k-bp: var(--k-art-chip-plum-p); border-width: 0; border-image: var(--k-bi) 50 64 60 64 fill / 25px 32px 30px 32px / 3.5px 3.5px 8.5px 3.5px; --k-sh-edge: inset 0 0 0 2.6px var(--ink); }
.k-chip[aria-pressed="true"], .k-chip.is-active { --k-bi: var(--k-art-chip-goo); --k-bh1: var(--k-art-chip-goo-h1); --k-bh2: var(--k-art-chip-goo-h2); --k-bh3: var(--k-art-chip-goo-h3); --k-bp: var(--k-art-chip-goo-p); }
@media (hover: hover) { .k-chip:hover { border-image: var(--k-bh1) 50 64 64 64 fill / 25px 32px 32px 32px / 3.5px 3.5px 10.5px 3.5px; animation: k-boil calc(var(--t-boil-interval) * 3) steps(1, end) infinite; } }
.k-chip:active { border-image: var(--k-bp) 50 64 54 64 fill / 25px 32px 27px 32px / 3.5px 3.5px 5.5px 3.5px; animation: none; }
html:is(.mono-ready, :not(.portal-active):not(.dashboard-active)) .k-chip::after { background: var(--k-bp) -9999px 0 / 1px 1px no-repeat; }
@media (hover: hover) { html:is(.mono-ready, :not(.portal-active):not(.dashboard-active)) .k-chip::after { background: var(--k-bh1) -9999px 0 / 1px 1px no-repeat, var(--k-bh2) -9999px 0 / 1px 1px no-repeat, var(--k-bh3) -9999px 0 / 1px 1px no-repeat, var(--k-bp) -9999px 0 / 1px 1px no-repeat; } }
.k-panel { border-width: 0; border-image: var(--k-art-body-panel) 76 76 92 76 fill / 38px 38px 46px 38px / 3px 3px 11px 3px; --k-sh-edge: inset 0 0 0 3px var(--ink); }
.k-tile { border-width: 0; border-image: var(--k-art-body-tile) 56 56 64 56 fill / 28px 28px 32px 28px / 3.5px 3.5px 7.5px 3.5px; --k-sh-edge: inset 0 0 0 3px var(--ink); }
.k-toast { border-width: 0; border-image: var(--k-art-body-toast) 66 64 78 64 fill / 33px 32px 39px 32px / 3px 3px 9px 3px; --k-sh-edge: inset 0 0 0 3px var(--ink); }
.k-field__box { border-width: 0; border-image: var(--k-art-body-field) 62 52 62 52 fill / 31px 26px 31px 26px / 3.5px 3.5px 3.5px 3.5px; --k-sh-edge: inset 0 0 0 3px var(--ink); }
.k-pad { border-width: 0; border-image: var(--k-art-body-pad) 86 100 104 100 fill / 43px 50px 52px 50px / 2.5px 2.5px 11.5px 2.5px; --k-sh-edge: inset 0 0 0 3px var(--ink); }
.k-dock__body { border-width: 0; border-image: var(--k-art-body-dock) 74 84 86 84 fill / 37px 42px 43px 42px / 3px 3px 9px 3px; --k-sh-edge: inset 0 0 0 3px var(--ink); }
.k-sheet { border-width: 0; border-image: var(--k-art-body-sheet) 20 80 96 80 fill / 10px 40px 48px 40px / 0px 3px 11px 3px; --k-sh-edge: inset 0 0 0 3px var(--ink); }
.k-tip { border-width: 0; border-image: var(--k-art-body-tooltip) 40 46 46 46 fill / 20px 23px 23px 23px / 3px 3px 6px 3px; --k-sh-edge: inset 0 0 0 3px var(--ink); }
.k-pad { background-image: none; } .k-pad::before, .k-pad::after { display: none; } /* the bake has the strip and the screws */
.k-sheet { --k-sh-edge: inset 3px 0 0 0 var(--ink), inset -3px 0 0 0 var(--ink), inset 0 -3px 0 0 var(--ink); }
.k-field--error .k-field__box { outline: 3px solid var(--danger); outline-offset: -6px; } /* the ring can't be an inset shadow under the fill */
@supports selector(:has(a)) { .k-field__box:has(.k-field__input[aria-invalid="true"]) { outline: 3px solid var(--danger); outline-offset: -6px; } }
.k-tip { --k-sh-edge: inset 0 0 0 2.4px var(--ink); }
/* @generated artrules:end */
@keyframes k-boil { 0%, 100% { border-image-source: var(--k-bh1); } 33.33% { border-image-source: var(--k-bh2); } 66.67% { border-image-source: var(--k-bh3); } }

/* ------------------------------------------------------------------------------------------------
   7. The gpu-paint switch (UIKIT §0, DESIGN §16.1 R1/R4/R6, §16.3 step 4).
   html.gpu-paint: the GPU is painting. An element joins the switch only when its painter marks it:
     data-gpu        the GPU paints this element's body, its text (.k-display/.k-gputext) and everything
                     inside it: all of its paint goes transparent (the box, text, rings, media, pseudos);
     data-gpu="body" only its own box paint goes transparent (its text and children stay CSS).
   Twins stay where they are and stay interactive: no display:none or visibility:hidden on a control,
   no kit motion (the GPU paints lift and sink; the hit box never moves). Joining fades the CSS paint
   out over 120 ms; removing html.gpu-paint (device loss) brings the CSS theme back in the same task.
   ------------------------------------------------------------------------------------------------ */
html.gpu-paint [data-gpu] { --k-motion: 0 !important; --k-free: 0 !important; }
html.gpu-paint [data-gpu]:not([data-gpu="body"]),
html.gpu-paint [data-gpu]:not([data-gpu="body"]) * {
  color: transparent !important;
  -webkit-text-fill-color: transparent !important;
  -webkit-text-stroke-color: transparent !important;
  text-shadow: none !important;
  text-decoration-color: transparent !important;
  caret-color: transparent !important;
  background-color: transparent !important;
  background-image: none !important;
  border-color: transparent !important;
  border-image-source: none !important;
  box-shadow: none !important;
  outline-color: transparent !important;
  fill: transparent !important;
  stroke: transparent !important;
  animation-play-state: paused !important;
  transition: color .12s linear, background-color .12s linear, border-color .12s linear, box-shadow .12s linear,
    text-shadow .12s linear, fill .12s linear, stroke .12s linear, opacity .12s linear !important;
}
html.gpu-paint [data-gpu]:not([data-gpu="body"])::before,
html.gpu-paint [data-gpu]:not([data-gpu="body"])::after,
html.gpu-paint [data-gpu]:not([data-gpu="body"]) *::before,
html.gpu-paint [data-gpu]:not([data-gpu="body"]) *::after { opacity: 0 !important; transition: opacity .12s linear !important; }
html.gpu-paint [data-gpu]:not([data-gpu="body"]) :is(img, video, canvas, picture, .k-media),
html.gpu-paint :is(img, video, canvas, picture)[data-gpu] { opacity: 0 !important; transition: opacity .12s linear !important; }
html.gpu-paint [data-gpu="body"] {
  background-color: transparent !important;
  background-image: none !important;
  border-color: transparent !important;
  border-image-source: none !important;
  box-shadow: none !important;
  outline-color: transparent !important;
  transition: background-color .12s linear, border-color .12s linear, box-shadow .12s linear !important;
}
html.gpu-paint [data-gpu="body"]::before, html.gpu-paint [data-gpu="body"]::after { opacity: 0 !important; transition: opacity .12s linear !important; }
/* GPU accents around CSS bodies (data-paint, KIT-API §8): while the GPU paints a goo key's E2 halo (data-paint="glow"), the
   CSS stand-in glow steps aside, so the halo is not doubled; the body itself stays CSS. */
html.gpu-paint [data-paint="glow"] { --k-sh-glow: var(--k-none) !important; }

/* ------------------------------------------------------------------------------------------------
   8. Reduced motion (DESIGN §10, UIKIT §34): the OS setting unless html[data-motion="full"], or
   html[data-motion="reduce"]. Every CSS animation stops on its end/base frame, transitions are
   instant, no smooth scroll. [data-k-fade] opts an element out (it must animate opacity only), and
   the kit's own reduced-motion fades and slides (toasts, sheet, dock, Play pill, switch knob; UIKIT §34) are
   re-enabled below.
   ------------------------------------------------------------------------------------------------ */
@media (prefers-reduced-motion: reduce) {
  html:not([data-motion="full"]) *:not([data-k-fade]), html:not([data-motion="full"]) *:not([data-k-fade])::before, html:not([data-motion="full"]) *:not([data-k-fade])::after {
    animation-duration: .01ms !important; animation-iteration-count: 1 !important; animation-delay: 0s !important;
    transition-duration: .01ms !important; transition-delay: 0s !important; scroll-behavior: auto !important;
  }
  html:not([data-motion="full"]) .k-toast { animation: k-fade-in 150ms linear both !important; }
  html:not([data-motion="full"]) .k-toast.is-leaving { animation: k-fade-out 150ms linear both !important; }
  html:not([data-motion="full"]) .k-sheet { animation: k-fade-in 120ms linear both !important; }
  html:not([data-motion="full"]) .k-dock__body { transition: opacity 120ms linear !important; }
  html:not([data-motion="full"]) .k-switch__track::after { transition: transform 120ms linear !important; }
  html:not([data-motion="full"]) .k-card .k-play, html:not([data-motion="full"]) .k-hublink .k-play { transition: opacity 150ms linear !important; }
  html:not([data-motion="full"]) .k-rot .k-bulb[aria-current="true"]::after { background-size: 100% 100%; background-image: radial-gradient(circle at 30% 30%, #fff 0 1.9px, transparent 2.3px), linear-gradient(var(--goo-5), var(--goo-5)); }
  html:not([data-motion="full"]) .k-rot .k-bulb[aria-current="true"]::before { --k-sh-still: 0 0 0 1px var(--void-2), 0 0 0 3.4px var(--goo-3); }
}
html[data-motion="reduce"] *:not([data-k-fade]), html[data-motion="reduce"] *:not([data-k-fade])::before, html[data-motion="reduce"] *:not([data-k-fade])::after {
  animation-duration: .01ms !important; animation-iteration-count: 1 !important; animation-delay: 0s !important;
  transition-duration: .01ms !important; transition-delay: 0s !important; scroll-behavior: auto !important;
}
html[data-motion="reduce"] .k-toast { animation: k-fade-in 150ms linear both !important; }
html[data-motion="reduce"] .k-toast.is-leaving { animation: k-fade-out 150ms linear both !important; }
html[data-motion="reduce"] .k-sheet { animation: k-fade-in 120ms linear both !important; }
html[data-motion="reduce"] .k-dock__body { transition: opacity 120ms linear !important; }
html[data-motion="reduce"] .k-switch__track::after { transition: transform 120ms linear !important; }
html[data-motion="reduce"] .k-card .k-play, html[data-motion="reduce"] .k-hublink .k-play { transition: opacity 150ms linear !important; }
html[data-motion="reduce"] .k-rot .k-bulb[aria-current="true"]::after { background-size: 100% 100%; background-image: radial-gradient(circle at 30% 30%, #fff 0 1.9px, transparent 2.3px), linear-gradient(var(--goo-5), var(--goo-5)); }
html[data-motion="reduce"] .k-rot .k-bulb[aria-current="true"]::before { --k-sh-still: 0 0 0 1px var(--void-2), 0 0 0 3.4px var(--goo-3); }

@keyframes k-blink { 0% { opacity: 1; } 50% { opacity: .4; } }
@keyframes k-wiggle { 0%, 100% { transform: rotate(var(--k-rot)); } 30% { transform: rotate(calc(var(--k-rot) + 2deg)); } 70% { transform: rotate(calc(var(--k-rot) - 2deg)); } }
@keyframes k-fade-in { from { opacity: 0; } }
@keyframes k-fade-out { to { opacity: 0; } }
@keyframes k-toast-in { from { opacity: 0; transform: translateY(14px) scale(.94); } }
@keyframes k-toast-out { to { opacity: 0; transform: translateY(10px) scale(.96); } }
@keyframes k-sheet-in { from { transform: translateY(-100%); } }
@keyframes k-bulb-fill { from { background-size: 100% 0%; } to { background-size: 100% 100%; } }
@keyframes k-drop-fall {
  0% { opacity: 0; transform: translateY(-22px) scale(.7); }
  18% { opacity: 1; }
  84% { opacity: 1; transform: translateY(calc(90px - var(--k-y))) scale(1, 1.08); }
  100% { opacity: 0; transform: translateY(calc(97px - var(--k-y))) scale(1.3, .55); }
}
@keyframes k-flow { to { stroke-dashoffset: -18; } }

/* ------------------------------------------------------------------------------------------------
   9. Forced colors (DESIGN §14, §15.9): the renderer never starts. System colours only, decoration
   off (drips, slop, glob, glare, peel, LEDs, live dots, the play pill), content images stay, words
   stay, focus = 3 px Highlight outline, selected = Highlight fill.
   ------------------------------------------------------------------------------------------------ */
@media (forced-colors: active) {
  .k-key, .k-jump, .k-chip, .k-seg, .k-seg__tab, .k-lcd, .k-field__box, .k-pill, .k-sticker, .k-plate, .k-slab, .k-panel,
  .k-tile, .k-row, .k-card, .k-toast, .k-tip, .k-bubble, .k-pad, .k-dock__body, .k-sheet, .k-alert, .k-inkpanel, .k-count, .k-tab {
    border-color: CanvasText; background-image: none; -webkit-text-stroke: 0; text-shadow: none; transform: none;
  }
  .k-key, .k-jump, .k-chip, .k-seg__tab, .k-lcd__clear, .k-toast__close, .k-banner__close, .k-field__eye, .k-tab { color: ButtonText; background-color: ButtonFace; border-color: ButtonText; }
  .k-key:disabled, .k-key[aria-disabled="true"] { color: GrayText; border-color: GrayText; }
  .k-chip[aria-pressed="true"], .k-chip.is-active, .k-seg__tab[aria-selected="true"], .k-key[aria-pressed="true"], .k-key[aria-checked="true"] {
    forced-color-adjust: none; background: Highlight; color: HighlightText; border-color: Highlight;
  }
  .k-chip[aria-pressed="true"] .k-count, .k-chip.is-active .k-count { forced-color-adjust: none; background: HighlightText; color: Highlight; border-color: HighlightText; }
  .k-switch__track { forced-color-adjust: none; background: Canvas; border-color: ButtonText; }
  .k-switch__track::after { forced-color-adjust: none; background: ButtonText; border-color: ButtonText; box-shadow: none; }
  .k-switch[aria-checked="true"] .k-switch__track, .k-switch__input:checked + .k-switch__track { background: Highlight; border-color: Highlight; }
  .k-switch[aria-checked="true"] .k-switch__track::after, .k-switch__input:checked + .k-switch__track::after { background: HighlightText; border-color: HighlightText; }
  .k-tab { border: 2px solid ButtonText; }
  .k-tube__bar { border-color: CanvasText; }
  .k-tube__bar::before { forced-color-adjust: none; background: Highlight; }
  .k-link, .k-doc a:not(.k-key):not(.k-jump), .k-table a:not(.k-key) { color: LinkText; }
  .k-key::before, .k-jump::before, .k-chip::before, .k-panel--slop::before, .k-boxart::before, .k-boxart::after, .k-sticker::before,
  .k-sticker::after, .k-led, .k-pill__dot, .k-play, .k-card__window::before, .k-card__window::after, .k-bar::after,
  .k-bubble::after, .k-bubble--shout::before, .k-toast__well--ok::after, .k-toast--ok .k-toast__well::after, .k-pad::before, .k-pad::after, .k-screw,
  .k-loader__drop, .k-art, .k-card__critter, .k-bulb::after, .k-lcd__kbd, .k-card__window::after { display: none !important; }
  .k-card__window { border-color: CanvasText; border-width: 2px; background: Canvas; }
  .k-bulb::before { forced-color-adjust: none; background: Canvas; border-color: ButtonText; box-shadow: none; }
  .k-bulb[aria-current="true"]::before { background: Highlight; border-color: Highlight; }
  .k-loader__art { height: 24px; background: none; }
  .k-loader__art::before { top: 0; left: 28px; width: 40px; height: 12px; border: 2px solid CanvasText; background: Canvas; box-shadow: none; opacity: 1; }
  .k-bubble--shout { border: 2px solid CanvasText; }
  svg { forced-color-adjust: auto; }
  .k-ico, .k-key > svg, .k-lcd__icon, .k-field__icon, .k-toast__well > svg, .k-banner__well > svg, .k-pill > svg { color: CanvasText; fill: currentColor; stroke: currentColor; }
  .k-key:focus-visible, .k-jump:focus-visible, .k-chip:focus-visible, .k-seg__tab:focus-visible, .k-card:focus-visible, .k-hublink:focus-visible,
  .k-switch:focus-visible .k-switch__track, .k-bulb:focus-visible::before, .k-avatar:focus-visible, .k-tab:focus-visible,
  .k-lcd:focus-within, .k-field__box:focus-within, .k-target:focus-visible, .k-link:focus-visible, .k-table a:focus-visible,
  .k-doc a:focus-visible, .k-toast__close:focus-visible, .k-banner__close:focus-visible, .k-lcd__clear:focus-visible,
  .k-field__eye:focus-visible, .k-banner__why > summary:focus-visible, :where(:focus-visible:not(iframe)) {
    outline: 3px solid Highlight !important; outline-offset: 2px !important;
  }
  .k-key, .k-jump, .k-chip, .k-panel, .k-tile, .k-toast, .k-field__box, .k-pad, .k-dock__body, .k-sheet, .k-tip {
    border-image: none !important; border-style: solid !important; border-width: 2px !important; animation: none !important;
  }
  /* the container carries the ring: no second outline on the inner control */
  .k-lcd__input:focus-visible, .k-field__input:focus-visible, .k-switch:focus-visible { outline: none !important; }
  .k-lcd__input::placeholder, .k-field__input::placeholder { color: GrayText; }
  .k-lcd__input, .k-lcd__readout, .k-lcd__kbd { color: CanvasText; text-shadow: none; }
  /* CSS-painted display type: no ink stroke (it would be forced to a solid system colour) */
  [class*="k-t-display"], .k-display, .k-card__title, .k-doc__title, .k-loader__label, .k-bar__title, .k-jump__title, .k-row__title { -webkit-text-stroke: 0 !important; }
  .k-portal, .k-row__portal { border-width: 2px !important; border-color: CanvasText; background: Canvas; box-shadow: none; }
  .k-ico-play, .k-play::before { forced-color-adjust: none; background: ButtonText; -webkit-mask: var(--k-img-play) center / contain no-repeat; mask: var(--k-img-play) center / contain no-repeat; }
}

/* prefers-contrast: more: ink lines on dark fills become 3 px text-hi (DESIGN §14) */
@media (prefers-contrast: more) {
  .k-slab, .k-panel, .k-tile, .k-row, .k-card, .k-toast, .k-pill, .k-plate, .k-pad, .k-dock__body, .k-sheet, .k-seg, .k-lcd,
  .k-alert, .k-inkpanel, .k-key--plum, .k-chip, .k-count, .k-card__window { border-color: var(--text-hi); }
  .k-slab, .k-panel, .k-card, .k-toast, .k-pad, .k-dock__body, .k-sheet, .k-seg, .k-key--plum, .k-chip { border-width: 3px; }
  .k-field__msg, .k-card__meta, .k-rot__count, .k-tile__label { color: var(--text); }
  /* dark baked bodies draw their own ink: give the high-contrast line back to CSS */
  .k-panel, .k-tile, .k-toast, .k-pad, .k-dock__body, .k-sheet, .k-chip:not([aria-pressed="true"]):not(.is-active), .k-key--plum:not([aria-pressed="true"]) {
    border-image: none !important; border-style: solid !important; border-width: 3px !important; --k-sh-edge: var(--k-none) !important;
  }
  .k-sheet { border-top-width: 0 !important; }
}
