/* aphes.ist lab kit 1.1.0: the design system for research viewers. https://aphes.ist/lab-kit/v1/
   Generated by tools/lab-kit/build.py on the design-system branch from system/tokens.json and
   tools/lab-kit/lab_src.css: change those and rebuild, never this file. */
@font-face{font-family:"Aphesis Script";src:url("fonts/AphesisScript-VF.woff2") format("woff2");font-weight:300 800;font-display:swap}
@font-face{font-family:"Special Elite";src:url("fonts/SpecialElite-latin.woff2") format("woff2");font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Special Elite";src:url("fonts/SpecialElite-latin-ext.woff2") format("woff2");font-display:swap;unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}
/* tokens (system/tokens.json). Light by default; dark follows the system unless data-theme says otherwise.
   data-theme="light" | "dark" works on the root and on any element inside it. */
:root{--font-display:"Aphesis Script", serif;--font-text:"Special Elite", "Aphesis Script", "Courier New", ui-monospace, monospace;--type-wordmark-size:110px;--type-wordmark-line:0.95;--type-wordmark-weight:400;--type-title-size:68px;--type-title-line:0.95;--type-title-weight:400;--type-heading-size:42px;--type-heading-line:1;--type-heading-weight:500;--type-lede-size:19px;--type-lede-line:1.6;--type-lede-weight:400;--type-body-size:16px;--type-body-line:1.75;--type-body-weight:400;--type-label-size:13px;--type-label-line:1;--type-label-weight:400;--type-label-tracking:0.22em;--type-meta-size:11px;--type-meta-line:1.7;--type-meta-weight:400;--type-meta-tracking:0.14em;--type-gloss-size:19px;--type-gloss-line:1;--type-gloss-weight:400;--type-gloss-title-size:15px;--type-gloss-title-line:1;--type-gloss-title-weight:400;--type-gloss-title-tracking:0.12em;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:20px;--space-5:32px;--space-6:52px;--space-7:84px;--space-8:136px;--radius-none:0;--radius-disc:50%;--duration-quick:.35s;--duration-slow:.7s;--duration-theme:.8s;--duration-shift:5.2s;--duration-scene:1.2s;--duration-hush:1.2s;--duration-voice:3.6s;--easing-settle:cubic-bezier(.2,.7,.2,1);--lab-cell:2px;--lab-stroke:2px;--lab-hair:1px;--lab-dot:6px;--lab-point:2px;--lab-point-emph:4px;--lab-point-pick:8px;--lab-dim-alpha:.32;--lab-fog-alpha:.55;--lab-band:50px;--lab-veil-blur:4px}
:root,[data-theme="light"]{--n-50:oklch(0.975 0.003 25);--n-100:oklch(0.95 0.004 25);--n-150:oklch(0.92 0.005 25);--n-200:oklch(0.88 0.006 25);--n-300:oklch(0.8 0.007 25);--n-400:oklch(0.7 0.008 25);--n-500:oklch(0.6 0.008 25);--n-600:oklch(0.5 0.008 25);--n-700:oklch(0.4 0.008 25);--n-800:oklch(0.3 0.007 25);--n-850:oklch(0.25 0.006 25);--n-900:oklch(0.2 0.006 25);--n-950:oklch(0.15 0.005 25);--n-975:oklch(0.11 0.004 25);--rubedo:oklch(0.47 0.185 26);--rubedo-text:oklch(0.45 0.18 26);--bg:var(--n-100);--ink:var(--n-900);--ink-soft:var(--n-600);--line:var(--n-300);--fog:var(--n-900);--accent:var(--rubedo);--accent-text:var(--rubedo-text);--seal:var(--rubedo);--lab-cat-1:oklch(0.46 0.13 258);--lab-cat-2:oklch(0.62 0.12 78);--lab-cat-3:oklch(0.52 0.1 165);--lab-cat-4:oklch(0.62 0.12 350);--lab-cat-5:oklch(0.48 0.12 50);--lab-cat-6:oklch(0.62 0.11 225);--lab-cat-7:oklch(0.48 0.11 315);--lab-cat-8:oklch(0.62 0.12 118);--lab-seq-1:var(--n-300);--lab-seq-2:var(--n-400);--lab-seq-3:var(--n-500);--lab-seq-4:var(--n-600);--lab-seq-5:var(--n-700);--lab-seq-6:var(--n-800);--lab-seq-7:var(--n-900);--lab-div-1:oklch(0.42 0.13 258);--lab-div-2:oklch(0.58 0.1 258);--lab-div-3:oklch(0.75 0.05 258);--lab-div-4:var(--n-200);--lab-div-5:oklch(0.76 0.06 26);--lab-div-6:oklch(0.6 0.14 26);--lab-div-7:var(--rubedo);--lab-grid:var(--n-200);--lab-axis:var(--n-400);--lab-axis-text:var(--ink-soft);--lab-mark:var(--ink);--lab-dim:var(--n-400);--lab-ref:var(--accent);--lab-pass:oklch(0.46 0.09 165);--lab-fail:var(--accent-text);color-scheme:light}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){--rubedo:oklch(0.57 0.2 26);--rubedo-text:oklch(0.66 0.17 26);--bg:var(--n-975);--ink:var(--n-100);--ink-soft:var(--n-500);--line:var(--n-800);--fog:var(--n-150);--lab-cat-1:oklch(0.58 0.14 258);--lab-cat-2:oklch(0.66 0.12 78);--lab-cat-3:oklch(0.54 0.1 165);--lab-cat-4:oklch(0.66 0.12 350);--lab-cat-5:oklch(0.52 0.12 50);--lab-cat-6:oklch(0.66 0.11 228);--lab-cat-7:oklch(0.52 0.13 315);--lab-cat-8:oklch(0.66 0.12 118);--lab-seq-1:var(--n-800);--lab-seq-2:var(--n-700);--lab-seq-3:var(--n-600);--lab-seq-4:var(--n-500);--lab-seq-5:var(--n-400);--lab-seq-6:var(--n-300);--lab-seq-7:var(--n-150);--lab-div-1:oklch(0.74 0.11 258);--lab-div-2:oklch(0.58 0.11 258);--lab-div-3:oklch(0.42 0.07 258);--lab-div-4:var(--n-800);--lab-div-5:oklch(0.42 0.09 26);--lab-div-6:var(--rubedo);--lab-div-7:oklch(0.72 0.14 26);--lab-grid:var(--n-850);--lab-axis:var(--n-700);--lab-dim:var(--n-600);--lab-pass:oklch(0.74 0.1 165);--accent:var(--rubedo);--accent-text:var(--rubedo-text);--seal:var(--rubedo);--lab-axis-text:var(--ink-soft);--lab-mark:var(--ink);--lab-ref:var(--accent);--lab-fail:var(--accent-text);color-scheme:dark}}
[data-theme="dark"]{--rubedo:oklch(0.57 0.2 26);--rubedo-text:oklch(0.66 0.17 26);--bg:var(--n-975);--ink:var(--n-100);--ink-soft:var(--n-500);--line:var(--n-800);--fog:var(--n-150);--lab-cat-1:oklch(0.58 0.14 258);--lab-cat-2:oklch(0.66 0.12 78);--lab-cat-3:oklch(0.54 0.1 165);--lab-cat-4:oklch(0.66 0.12 350);--lab-cat-5:oklch(0.52 0.12 50);--lab-cat-6:oklch(0.66 0.11 228);--lab-cat-7:oklch(0.52 0.13 315);--lab-cat-8:oklch(0.66 0.12 118);--lab-seq-1:var(--n-800);--lab-seq-2:var(--n-700);--lab-seq-3:var(--n-600);--lab-seq-4:var(--n-500);--lab-seq-5:var(--n-400);--lab-seq-6:var(--n-300);--lab-seq-7:var(--n-150);--lab-div-1:oklch(0.74 0.11 258);--lab-div-2:oklch(0.58 0.11 258);--lab-div-3:oklch(0.42 0.07 258);--lab-div-4:var(--n-800);--lab-div-5:oklch(0.42 0.09 26);--lab-div-6:var(--rubedo);--lab-div-7:oklch(0.72 0.14 26);--lab-grid:var(--n-850);--lab-axis:var(--n-700);--lab-dim:var(--n-600);--lab-pass:oklch(0.74 0.1 165);--accent:var(--rubedo);--accent-text:var(--rubedo-text);--seal:var(--rubedo);--lab-axis-text:var(--ink-soft);--lab-mark:var(--ink);--lab-ref:var(--accent);--lab-fail:var(--accent-text);color-scheme:dark}
@media print{:root,[data-theme]{--n-50:oklch(0.975 0.003 25);--n-100:oklch(0.95 0.004 25);--n-150:oklch(0.92 0.005 25);--n-200:oklch(0.88 0.006 25);--n-300:oklch(0.8 0.007 25);--n-400:oklch(0.7 0.008 25);--n-500:oklch(0.6 0.008 25);--n-600:oklch(0.5 0.008 25);--n-700:oklch(0.4 0.008 25);--n-800:oklch(0.3 0.007 25);--n-850:oklch(0.25 0.006 25);--n-900:oklch(0.2 0.006 25);--n-950:oklch(0.15 0.005 25);--n-975:oklch(0.11 0.004 25);--rubedo:oklch(0.47 0.185 26);--rubedo-text:oklch(0.45 0.18 26);--bg:var(--n-100);--ink:var(--n-900);--ink-soft:var(--n-600);--line:var(--n-300);--fog:var(--n-900);--accent:var(--rubedo);--accent-text:var(--rubedo-text);--seal:var(--rubedo);--lab-cat-1:oklch(0.46 0.13 258);--lab-cat-2:oklch(0.62 0.12 78);--lab-cat-3:oklch(0.52 0.1 165);--lab-cat-4:oklch(0.62 0.12 350);--lab-cat-5:oklch(0.48 0.12 50);--lab-cat-6:oklch(0.62 0.11 225);--lab-cat-7:oklch(0.48 0.11 315);--lab-cat-8:oklch(0.62 0.12 118);--lab-seq-1:var(--n-300);--lab-seq-2:var(--n-400);--lab-seq-3:var(--n-500);--lab-seq-4:var(--n-600);--lab-seq-5:var(--n-700);--lab-seq-6:var(--n-800);--lab-seq-7:var(--n-900);--lab-div-1:oklch(0.42 0.13 258);--lab-div-2:oklch(0.58 0.1 258);--lab-div-3:oklch(0.75 0.05 258);--lab-div-4:var(--n-200);--lab-div-5:oklch(0.76 0.06 26);--lab-div-6:oklch(0.6 0.14 26);--lab-div-7:var(--rubedo);--lab-grid:var(--n-200);--lab-axis:var(--n-400);--lab-axis-text:var(--ink-soft);--lab-mark:var(--ink);--lab-dim:var(--n-400);--lab-ref:var(--accent);--lab-pass:oklch(0.46 0.09 165);--lab-fail:var(--accent-text);color-scheme:light}}
/* stipple: square cells as masks (lab.js draws the same tiles into SVG). Paint the colour, mask the cells. */
:root{--lab-stipple-1:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='48' height='48' shape-rendering='crispEdges'%3E%3Cpath d='M14 0h2v2h-2zM26 0h2v2h-2zM36 0h2v2h-2zM14 2h2v2h-2zM20 2h2v2h-2zM22 4h2v2h-2zM34 4h2v2h-2zM40 4h2v2h-2zM12 6h2v2h-2zM36 6h2v2h-2zM44 6h2v2h-2zM40 8h2v2h-2zM6 10h2v2h-2zM40 10h2v2h-2zM2 12h2v2h-2zM22 12h2v2h-2zM38 12h2v2h-2zM40 12h2v2h-2zM44 12h2v2h-2zM16 16h2v2h-2zM26 16h2v2h-2zM32 16h2v2h-2zM28 18h2v2h-2zM30 18h2v2h-2zM42 18h2v2h-2zM0 20h2v2h-2zM12 20h2v2h-2zM16 20h2v2h-2zM22 20h2v2h-2zM26 20h2v2h-2zM36 20h2v2h-2zM46 20h2v2h-2zM0 22h2v2h-2zM24 22h2v2h-2zM26 22h2v2h-2zM38 22h2v2h-2zM4 24h2v2h-2zM12 24h2v2h-2zM32 24h2v2h-2zM4 26h2v2h-2zM6 26h2v2h-2zM0 28h2v2h-2zM20 28h2v2h-2zM26 28h2v2h-2zM0 30h2v2h-2zM16 30h2v2h-2zM28 30h2v2h-2zM40 30h2v2h-2zM46 30h2v2h-2zM18 32h2v2h-2zM22 32h2v2h-2zM46 32h2v2h-2zM6 34h2v2h-2zM12 34h2v2h-2zM32 34h2v2h-2zM38 34h2v2h-2zM44 34h2v2h-2zM4 36h2v2h-2zM18 36h2v2h-2zM24 36h2v2h-2zM38 36h2v2h-2zM2 38h2v2h-2zM28 38h2v2h-2zM44 38h2v2h-2zM44 40h2v2h-2zM16 44h2v2h-2zM26 44h2v2h-2zM32 44h2v2h-2zM34 44h2v2h-2zM42 44h2v2h-2zM0 46h2v2h-2zM4 46h2v2h-2zM20 46h2v2h-2zM36 46h2v2h-2zM38 46h2v2h-2z'/%3E%3C/svg%3E");--lab-stipple-2:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='48' height='48' shape-rendering='crispEdges'%3E%3Cpath d='M0 0h2v2h-2zM2 0h2v2h-2zM10 0h2v2h-2zM24 0h2v2h-2zM26 0h2v2h-2zM42 0h2v2h-2zM44 0h2v2h-2zM46 0h2v2h-2zM2 2h2v2h-2zM4 2h2v2h-2zM16 2h2v2h-2zM20 2h2v2h-2zM24 2h2v2h-2zM42 2h2v2h-2zM0 4h2v2h-2zM6 4h2v2h-2zM18 4h2v2h-2zM26 4h2v2h-2zM28 4h2v2h-2zM34 4h2v2h-2zM46 4h2v2h-2zM2 6h2v2h-2zM4 6h2v2h-2zM10 6h2v2h-2zM14 6h2v2h-2zM16 6h2v2h-2zM18 6h2v2h-2zM26 6h2v2h-2zM30 6h2v2h-2zM32 6h2v2h-2zM40 6h2v2h-2zM0 8h2v2h-2zM4 8h2v2h-2zM22 8h2v2h-2zM24 8h2v2h-2zM30 8h2v2h-2zM36 8h2v2h-2zM44 8h2v2h-2zM2 10h2v2h-2zM8 10h2v2h-2zM22 10h2v2h-2zM24 10h2v2h-2zM26 10h2v2h-2zM36 10h2v2h-2zM42 10h2v2h-2zM46 10h2v2h-2zM8 12h2v2h-2zM14 12h2v2h-2zM22 12h2v2h-2zM24 12h2v2h-2zM32 12h2v2h-2zM4 14h2v2h-2zM8 14h2v2h-2zM14 14h2v2h-2zM26 14h2v2h-2zM32 14h2v2h-2zM36 14h2v2h-2zM44 14h2v2h-2zM8 16h2v2h-2zM12 16h2v2h-2zM14 16h2v2h-2zM22 16h2v2h-2zM34 16h2v2h-2zM38 16h2v2h-2zM42 16h2v2h-2zM46 16h2v2h-2zM0 18h2v2h-2zM8 18h2v2h-2zM10 18h2v2h-2zM16 18h2v2h-2zM22 18h2v2h-2zM28 18h2v2h-2zM30 18h2v2h-2zM46 18h2v2h-2zM4 20h2v2h-2zM6 20h2v2h-2zM10 20h2v2h-2zM12 20h2v2h-2zM18 20h2v2h-2zM24 20h2v2h-2zM28 20h2v2h-2zM34 20h2v2h-2zM36 20h2v2h-2zM38 20h2v2h-2zM46 20h2v2h-2zM2 22h2v2h-2zM14 22h2v2h-2zM16 22h2v2h-2zM36 22h2v2h-2zM2 24h2v2h-2zM4 24h2v2h-2zM10 24h2v2h-2zM24 24h2v2h-2zM26 24h2v2h-2zM28 24h2v2h-2zM32 24h2v2h-2zM36 24h2v2h-2zM40 24h2v2h-2zM4 26h2v2h-2zM6 26h2v2h-2zM14 26h2v2h-2zM26 26h2v2h-2zM12 28h2v2h-2zM16 28h2v2h-2zM18 28h2v2h-2zM26 28h2v2h-2zM34 28h2v2h-2zM38 28h2v2h-2zM40 28h2v2h-2zM2 30h2v2h-2zM4 30h2v2h-2zM8 30h2v2h-2zM10 30h2v2h-2zM18 30h2v2h-2zM20 30h2v2h-2zM22 30h2v2h-2zM24 30h2v2h-2zM28 30h2v2h-2zM32 30h2v2h-2zM34 30h2v2h-2zM44 30h2v2h-2zM4 32h2v2h-2zM12 32h2v2h-2zM14 32h2v2h-2zM20 32h2v2h-2zM24 32h2v2h-2zM28 32h2v2h-2zM32 32h2v2h-2zM46 32h2v2h-2zM8 34h2v2h-2zM10 34h2v2h-2zM12 34h2v2h-2zM16 34h2v2h-2zM20 34h2v2h-2zM46 34h2v2h-2zM4 36h2v2h-2zM10 36h2v2h-2zM14 36h2v2h-2zM20 36h2v2h-2zM36 36h2v2h-2zM44 36h2v2h-2zM6 38h2v2h-2zM12 38h2v2h-2zM16 38h2v2h-2zM18 38h2v2h-2zM20 38h2v2h-2zM22 38h2v2h-2zM38 38h2v2h-2zM40 38h2v2h-2zM46 38h2v2h-2zM4 40h2v2h-2zM8 40h2v2h-2zM12 40h2v2h-2zM16 40h2v2h-2zM34 40h2v2h-2zM36 40h2v2h-2zM40 40h2v2h-2zM42 40h2v2h-2zM0 42h2v2h-2zM2 42h2v2h-2zM4 42h2v2h-2zM6 42h2v2h-2zM20 42h2v2h-2zM26 42h2v2h-2zM28 42h2v2h-2zM40 42h2v2h-2zM44 42h2v2h-2zM6 44h2v2h-2zM12 44h2v2h-2zM36 44h2v2h-2zM4 46h2v2h-2zM10 46h2v2h-2zM12 46h2v2h-2zM16 46h2v2h-2zM18 46h2v2h-2zM22 46h2v2h-2zM24 46h2v2h-2zM26 46h2v2h-2zM32 46h2v2h-2zM42 46h2v2h-2z'/%3E%3C/svg%3E");--lab-stipple-3:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='48' height='48' shape-rendering='crispEdges'%3E%3Cpath d='M2 0h2v2h-2zM4 0h2v2h-2zM18 0h2v2h-2zM20 0h2v2h-2zM22 0h2v2h-2zM24 0h2v2h-2zM28 0h2v2h-2zM32 0h2v2h-2zM36 0h2v2h-2zM38 0h2v2h-2zM40 0h2v2h-2zM42 0h2v2h-2zM0 2h2v2h-2zM2 2h2v2h-2zM4 2h2v2h-2zM6 2h2v2h-2zM8 2h2v2h-2zM12 2h2v2h-2zM18 2h2v2h-2zM24 2h2v2h-2zM26 2h2v2h-2zM28 2h2v2h-2zM34 2h2v2h-2zM36 2h2v2h-2zM38 2h2v2h-2zM42 2h2v2h-2zM0 4h2v2h-2zM2 4h2v2h-2zM8 4h2v2h-2zM10 4h2v2h-2zM12 4h2v2h-2zM18 4h2v2h-2zM28 4h2v2h-2zM36 4h2v2h-2zM46 4h2v2h-2zM4 6h2v2h-2zM8 6h2v2h-2zM10 6h2v2h-2zM18 6h2v2h-2zM24 6h2v2h-2zM26 6h2v2h-2zM30 6h2v2h-2zM32 6h2v2h-2zM38 6h2v2h-2zM42 6h2v2h-2zM44 6h2v2h-2zM46 6h2v2h-2zM2 8h2v2h-2zM6 8h2v2h-2zM8 8h2v2h-2zM12 8h2v2h-2zM14 8h2v2h-2zM16 8h2v2h-2zM20 8h2v2h-2zM26 8h2v2h-2zM28 8h2v2h-2zM34 8h2v2h-2zM38 8h2v2h-2zM40 8h2v2h-2zM42 8h2v2h-2zM2 10h2v2h-2zM4 10h2v2h-2zM6 10h2v2h-2zM8 10h2v2h-2zM14 10h2v2h-2zM16 10h2v2h-2zM18 10h2v2h-2zM20 10h2v2h-2zM24 10h2v2h-2zM26 10h2v2h-2zM30 10h2v2h-2zM42 10h2v2h-2zM44 10h2v2h-2zM2 12h2v2h-2zM4 12h2v2h-2zM6 12h2v2h-2zM8 12h2v2h-2zM14 12h2v2h-2zM20 12h2v2h-2zM24 12h2v2h-2zM28 12h2v2h-2zM30 12h2v2h-2zM32 12h2v2h-2zM36 12h2v2h-2zM38 12h2v2h-2zM40 12h2v2h-2zM42 12h2v2h-2zM0 14h2v2h-2zM2 14h2v2h-2zM6 14h2v2h-2zM10 14h2v2h-2zM14 14h2v2h-2zM18 14h2v2h-2zM20 14h2v2h-2zM22 14h2v2h-2zM26 14h2v2h-2zM30 14h2v2h-2zM32 14h2v2h-2zM34 14h2v2h-2zM36 14h2v2h-2zM38 14h2v2h-2zM40 14h2v2h-2zM44 14h2v2h-2zM2 16h2v2h-2zM8 16h2v2h-2zM10 16h2v2h-2zM18 16h2v2h-2zM20 16h2v2h-2zM26 16h2v2h-2zM30 16h2v2h-2zM32 16h2v2h-2zM46 16h2v2h-2zM6 18h2v2h-2zM10 18h2v2h-2zM12 18h2v2h-2zM14 18h2v2h-2zM16 18h2v2h-2zM18 18h2v2h-2zM20 18h2v2h-2zM22 18h2v2h-2zM26 18h2v2h-2zM30 18h2v2h-2zM34 18h2v2h-2zM36 18h2v2h-2zM38 18h2v2h-2zM40 18h2v2h-2zM42 18h2v2h-2zM2 20h2v2h-2zM4 20h2v2h-2zM6 20h2v2h-2zM8 20h2v2h-2zM10 20h2v2h-2zM12 20h2v2h-2zM14 20h2v2h-2zM16 20h2v2h-2zM20 20h2v2h-2zM22 20h2v2h-2zM24 20h2v2h-2zM26 20h2v2h-2zM34 20h2v2h-2zM36 20h2v2h-2zM38 20h2v2h-2zM40 20h2v2h-2zM42 20h2v2h-2zM46 20h2v2h-2zM2 22h2v2h-2zM4 22h2v2h-2zM6 22h2v2h-2zM10 22h2v2h-2zM16 22h2v2h-2zM20 22h2v2h-2zM24 22h2v2h-2zM28 22h2v2h-2zM30 22h2v2h-2zM32 22h2v2h-2zM34 22h2v2h-2zM36 22h2v2h-2zM38 22h2v2h-2zM40 22h2v2h-2zM44 22h2v2h-2zM46 22h2v2h-2zM4 24h2v2h-2zM10 24h2v2h-2zM12 24h2v2h-2zM14 24h2v2h-2zM16 24h2v2h-2zM18 24h2v2h-2zM20 24h2v2h-2zM26 24h2v2h-2zM34 24h2v2h-2zM36 24h2v2h-2zM40 24h2v2h-2zM44 24h2v2h-2zM46 24h2v2h-2zM2 26h2v2h-2zM4 26h2v2h-2zM6 26h2v2h-2zM8 26h2v2h-2zM20 26h2v2h-2zM22 26h2v2h-2zM30 26h2v2h-2zM34 26h2v2h-2zM38 26h2v2h-2zM42 26h2v2h-2zM46 26h2v2h-2zM4 28h2v2h-2zM8 28h2v2h-2zM10 28h2v2h-2zM24 28h2v2h-2zM26 28h2v2h-2zM30 28h2v2h-2zM34 28h2v2h-2zM36 28h2v2h-2zM40 28h2v2h-2zM42 28h2v2h-2zM46 28h2v2h-2zM0 30h2v2h-2zM8 30h2v2h-2zM12 30h2v2h-2zM16 30h2v2h-2zM18 30h2v2h-2zM30 30h2v2h-2zM34 30h2v2h-2zM36 30h2v2h-2zM40 30h2v2h-2zM42 30h2v2h-2zM44 30h2v2h-2zM2 32h2v2h-2zM6 32h2v2h-2zM8 32h2v2h-2zM10 32h2v2h-2zM12 32h2v2h-2zM16 32h2v2h-2zM18 32h2v2h-2zM20 32h2v2h-2zM24 32h2v2h-2zM28 32h2v2h-2zM30 32h2v2h-2zM32 32h2v2h-2zM36 32h2v2h-2zM38 32h2v2h-2zM40 32h2v2h-2zM44 32h2v2h-2zM46 32h2v2h-2zM0 34h2v2h-2zM4 34h2v2h-2zM6 34h2v2h-2zM12 34h2v2h-2zM20 34h2v2h-2zM22 34h2v2h-2zM30 34h2v2h-2zM32 34h2v2h-2zM36 34h2v2h-2zM46 34h2v2h-2zM2 36h2v2h-2zM4 36h2v2h-2zM6 36h2v2h-2zM8 36h2v2h-2zM14 36h2v2h-2zM16 36h2v2h-2zM20 36h2v2h-2zM22 36h2v2h-2zM26 36h2v2h-2zM28 36h2v2h-2zM36 36h2v2h-2zM38 36h2v2h-2zM40 36h2v2h-2zM44 36h2v2h-2zM46 36h2v2h-2zM0 38h2v2h-2zM2 38h2v2h-2zM8 38h2v2h-2zM10 38h2v2h-2zM16 38h2v2h-2zM20 38h2v2h-2zM22 38h2v2h-2zM26 38h2v2h-2zM28 38h2v2h-2zM32 38h2v2h-2zM34 38h2v2h-2zM38 38h2v2h-2zM42 38h2v2h-2zM44 38h2v2h-2zM46 38h2v2h-2zM0 40h2v2h-2zM4 40h2v2h-2zM6 40h2v2h-2zM10 40h2v2h-2zM12 40h2v2h-2zM16 40h2v2h-2zM18 40h2v2h-2zM20 40h2v2h-2zM28 40h2v2h-2zM30 40h2v2h-2zM36 40h2v2h-2zM38 40h2v2h-2zM40 40h2v2h-2zM46 40h2v2h-2zM0 42h2v2h-2zM8 42h2v2h-2zM12 42h2v2h-2zM16 42h2v2h-2zM18 42h2v2h-2zM24 42h2v2h-2zM26 42h2v2h-2zM30 42h2v2h-2zM32 42h2v2h-2zM36 42h2v2h-2zM38 42h2v2h-2zM40 42h2v2h-2zM44 42h2v2h-2zM46 42h2v2h-2zM0 44h2v2h-2zM2 44h2v2h-2zM6 44h2v2h-2zM8 44h2v2h-2zM18 44h2v2h-2zM20 44h2v2h-2zM24 44h2v2h-2zM26 44h2v2h-2zM30 44h2v2h-2zM34 44h2v2h-2zM42 44h2v2h-2zM0 46h2v2h-2zM2 46h2v2h-2zM4 46h2v2h-2zM6 46h2v2h-2zM8 46h2v2h-2zM12 46h2v2h-2zM18 46h2v2h-2zM20 46h2v2h-2zM22 46h2v2h-2zM26 46h2v2h-2zM28 46h2v2h-2zM30 46h2v2h-2zM32 46h2v2h-2zM36 46h2v2h-2zM38 46h2v2h-2zM40 46h2v2h-2zM46 46h2v2h-2z'/%3E%3C/svg%3E");--lab-ring:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' shape-rendering='crispEdges'%3E%3Cpath d='M0 0h2v2h-2zM2 0h2v2h-2zM4 0h2v2h-2zM6 0h2v2h-2zM8 0h2v2h-2zM10 0h2v2h-2zM12 0h2v2h-2zM0 2h2v2h-2zM12 2h2v2h-2zM0 4h2v2h-2zM12 4h2v2h-2zM0 6h2v2h-2zM12 6h2v2h-2zM0 8h2v2h-2zM12 8h2v2h-2zM0 10h2v2h-2zM12 10h2v2h-2zM0 12h2v2h-2zM2 12h2v2h-2zM4 12h2v2h-2zM6 12h2v2h-2zM8 12h2v2h-2zM10 12h2v2h-2zM12 12h2v2h-2z'/%3E%3C/svg%3E")}
/* the φ, as drawn (system/assets/Logos/phi.svg), painted in seal */
:root{--lab-phi:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='69 -6 385 533'%3E%3Cpath fill-rule='evenodd' d='M249.62 521.76C248.36 521.24 247.86 520.12 247.49 516.93C246.94 512.14 245.95 505.72 245.10 501.38C244.62 498.91 244.11 495.71 243.98 494.26C243.85 492.81 243.45 489.49 243.08 486.88C242.16 480.21 242.03 478.63 241.77 469.88C241.64 465.61 241.41 460.83 241.26 459.25C240.55 451.79 240.92 427.05 241.87 418.43C242.47 413.06 242.43 403.10 241.80 399.12C240.83 393.02 240.88 379.73 241.91 370.25C242.33 366.40 242.38 359.33 242.03 354.67C241.76 351.05 241.68 350.97 237.16 349.86C232.75 348.78 227.52 348.00 224.65 348.00C211.59 348.00 194.21 342.73 174.50 332.80C166.47 328.76 162.60 326.27 155.82 320.82C154.49 319.75 152.12 317.84 150.54 316.58C144.03 311.35 131.73 299.34 125.63 292.24C124.39 290.80 122.72 288.89 121.91 288.00C117.78 283.43 110.64 273.94 107.13 268.38C106.61 267.55 105.27 265.64 104.14 264.12C99.55 257.98 91.18 244.36 87.69 237.38C84.17 230.32 82.60 223.54 81.50 210.62C80.58 199.72 79.74 195.01 77.51 188.12C75.52 182.00 75.01 179.84 73.46 171.00C73.24 169.75 73.13 166.79 73.13 162.12C73.13 155.55 73.17 154.88 73.84 151.12C75.18 143.51 77.13 137.32 79.75 132.38C81.92 128.27 90.62 110.76 91.00 109.75C91.53 108.31 102.10 87.07 103.63 84.38C104.41 83.00 106.29 79.57 107.80 76.75C116.63 60.36 124.58 48.79 135.67 36.22C139.57 31.80 144.98 26.71 151.96 20.91C153.01 20.03 156.95 17.17 161.25 14.15C170.71 7.52 178.46 4.09 189.60 1.63C200.84 -0.86 210.83 -0.42 223.35 3.13C225.54 3.74 227.48 4.25 227.67 4.25C228.38 4.25 231.16 5.31 232.04 5.91C234.14 7.35 234.34 10.20 232.46 11.91C231.17 13.09 226.67 14.97 217.15 18.30C206.25 22.11 200.24 26.35 190.14 37.38C187.14 40.65 185.45 42.69 179.88 49.77C177.23 53.13 171.79 58.78 168.76 61.32C167.59 62.30 165.50 64.23 164.12 65.61C155.71 74.06 149.56 89.27 145.63 111.37C145.01 114.86 144.23 119.21 143.90 121.05C143.56 122.88 143.16 125.39 143.01 126.62C142.85 127.86 142.62 129.32 142.50 129.88C141.95 132.36 140.00 144.14 139.74 146.50C139.59 147.94 139.36 149.65 139.24 150.29C138.32 155.15 137.82 174.75 138.46 180.50C138.91 184.47 140.65 194.70 141.30 197.12C141.59 198.22 142.60 201.20 143.54 203.73C145.49 208.98 145.99 210.68 147.13 215.75C147.57 217.74 148.34 220.89 148.84 222.75C149.34 224.61 150.03 227.64 150.37 229.49C152.17 239.05 156.73 251.79 159.70 255.58C161.77 258.23 166.17 264.74 168.47 268.56C170.86 272.54 180.44 285.33 183.50 288.63C184.53 289.74 186.39 291.82 187.62 293.24C188.86 294.67 190.78 296.86 191.89 298.11C193.00 299.35 194.71 301.34 195.68 302.53C199.28 306.88 206.95 313.32 210.75 315.18C212.06 315.82 213.69 316.68 214.38 317.09C223.11 322.24 238.96 327.49 241.08 325.94C241.57 325.58 241.85 324.03 242.23 319.62C242.37 317.98 242.68 314.99 242.92 313.00C243.47 308.40 243.54 288.59 243.03 281.00C242.38 271.21 242.27 269.80 241.85 265.62C240.90 256.22 241.31 230.70 242.51 223.62C242.65 222.80 242.87 219.99 242.99 217.38C243.12 214.76 243.36 211.37 243.53 209.84C243.84 207.09 243.72 203.89 243.00 196.12C242.89 194.89 242.78 192.00 242.77 189.71C242.76 187.42 242.59 184.05 242.39 182.21C241.72 175.97 240.67 159.91 240.25 149.50C240.00 143.15 240.26 128.52 240.75 121.50C240.89 119.51 241.06 116.97 241.14 115.88C241.21 114.78 241.43 112.86 241.63 111.62C241.82 110.39 242.10 107.41 242.24 105.00C242.38 102.59 242.61 99.11 242.74 97.25C242.87 95.39 243.04 90.33 243.13 86.00C243.21 81.67 243.38 77.00 243.51 75.62C243.64 74.25 243.87 71.91 244.01 70.42C245.35 56.17 250.01 44.73 259.14 33.23C267.53 22.66 286.11 7.41 297.37 1.85L301.12 -0.00L311.04 -0.00C317.54 -0.00 321.21 0.09 321.67 0.27C323.82 1.09 332.25 3.01 335.25 3.35C339.76 3.87 352.37 6.42 358.88 8.13C366.84 10.22 376.97 14.61 381.24 17.82C386.39 21.69 390.97 27.35 393.94 33.50C395.19 36.10 398.18 41.40 400.61 45.35C401.46 46.74 402.79 49.00 403.56 50.38C405.00 52.95 407.78 57.27 411.14 62.16C412.19 63.69 413.34 65.44 413.70 66.04C414.06 66.63 415.66 68.92 417.26 71.12C418.85 73.33 420.94 76.39 421.89 77.94C424.29 81.84 430.72 92.21 434.14 97.68C436.99 102.24 442.41 112.87 444.13 117.26C445.57 120.94 446.75 125.20 447.75 130.38C449.56 139.65 449.61 140.13 450.25 151.50C450.50 155.79 450.44 157.30 449.73 166.09C448.84 177.20 443.17 203.31 438.24 219.00C437.70 220.72 436.71 224.38 436.03 227.12C432.92 239.82 430.51 248.01 429.51 249.38C429.40 249.51 428.05 251.99 426.50 254.88C424.95 257.76 423.10 261.02 422.39 262.12C419.35 266.80 411.58 276.87 407.25 281.73C403.24 286.23 398.38 293.01 395.10 298.67C391.95 304.10 390.47 306.13 384.98 312.50C377.28 321.45 368.57 328.27 356.00 335.17C350.34 338.28 339.10 341.71 333.20 342.12C324.54 342.73 319.28 343.60 307.50 346.38C301.94 347.69 294.30 349.23 289.00 350.11C284.68 350.83 284.58 350.86 284.12 351.77C283.73 352.51 281.83 361.20 281.16 365.25C278.76 379.77 278.71 397.39 281.02 409.50C281.29 410.94 281.69 413.76 281.89 415.75C282.09 417.74 282.38 420.50 282.52 421.88C283.02 426.45 282.31 442.06 281.38 447.19C281.18 448.33 280.90 451.37 280.76 453.94C280.24 463.70 278.21 471.83 272.30 487.75C269.55 495.17 268.19 497.88 264.61 503.00C262.53 505.99 258.08 513.35 256.71 516.07C254.58 520.33 251.72 522.62 249.62 521.76ZM290.84 324.52C301.48 321.03 304.01 320.41 308.88 320.12C318.88 319.53 326.43 317.41 337.38 312.13C347.19 307.40 356.89 299.05 366.85 286.76C371.47 281.05 373.12 278.73 374.50 276.00C374.94 275.12 375.89 273.44 376.61 272.27C381.55 264.20 384.64 255.54 385.63 247.00C385.72 246.24 386.17 243.38 386.63 240.62C387.08 237.88 387.53 235.00 387.62 234.24C387.70 233.48 388.23 231.06 388.79 228.86C390.34 222.76 391.37 217.33 391.76 213.17C391.89 211.77 392.10 210.17 392.24 209.62C392.57 208.21 392.98 203.09 393.26 196.62C393.40 193.60 393.61 189.94 393.74 188.50C393.97 185.94 394.38 180.04 395.13 168.38C395.73 159.28 395.59 154.77 394.50 146.88C393.33 138.45 391.78 133.27 388.13 125.62C387.21 123.70 386.14 121.34 385.75 120.38C385.36 119.41 384.68 117.96 384.23 117.16C383.79 116.35 382.90 114.49 382.26 113.02C381.62 111.56 380.61 109.64 380.01 108.77C377.73 105.40 374.03 96.17 372.24 89.37C369.17 77.68 365.73 72.91 352.22 61.66C349.52 59.41 346.49 56.61 344.97 54.96C338.13 47.50 336.80 46.83 326.27 45.52C307.57 43.18 299.08 45.01 294.15 52.47C292.75 54.59 288.43 63.22 287.46 65.85C286.10 69.54 285.24 74.21 284.37 82.62C283.80 88.25 283.29 92.36 282.89 94.70C282.68 95.90 282.34 98.56 282.13 100.62C281.92 102.69 281.50 105.89 281.21 107.75C280.24 113.87 280.81 130.35 282.39 141.89C282.59 143.40 282.87 148.35 283.00 152.89C283.13 157.42 283.36 162.90 283.51 165.07C283.85 169.99 283.21 184.48 282.38 190.50C282.18 191.94 281.84 194.87 281.63 197.00C281.41 199.13 281.02 202.45 280.76 204.38C280.50 206.30 280.22 208.72 280.12 209.75C280.03 210.78 279.81 212.69 279.63 214.00C279.22 216.88 279.12 247.18 279.50 251.75C279.63 253.33 279.85 259.63 279.99 265.75C280.13 271.87 280.42 279.07 280.62 281.75C280.82 284.43 281.11 289.77 281.26 293.62C281.41 297.48 281.69 302.03 281.88 303.75C282.07 305.47 282.29 307.77 282.37 308.88C282.45 309.98 282.62 312.00 282.76 313.38C282.89 314.75 283.17 317.73 283.38 320.00C283.83 324.88 283.92 325.39 284.41 325.88C284.96 326.43 285.11 326.40 290.84 324.52Z'/%3E%3C/svg%3E")}
/* colour classes: each sets --lab-k, which every mark, key and swatch of the kit paints with */
.lab-c1{--lab-k:var(--lab-cat-1)}.lab-c2{--lab-k:var(--lab-cat-2)}.lab-c3{--lab-k:var(--lab-cat-3)}.lab-c4{--lab-k:var(--lab-cat-4)}.lab-c5{--lab-k:var(--lab-cat-5)}.lab-c6{--lab-k:var(--lab-cat-6)}.lab-c7{--lab-k:var(--lab-cat-7)}.lab-c8{--lab-k:var(--lab-cat-8)}.lab-s1{--lab-k:var(--lab-seq-1)}.lab-s2{--lab-k:var(--lab-seq-2)}.lab-s3{--lab-k:var(--lab-seq-3)}.lab-s4{--lab-k:var(--lab-seq-4)}.lab-s5{--lab-k:var(--lab-seq-5)}.lab-s6{--lab-k:var(--lab-seq-6)}.lab-s7{--lab-k:var(--lab-seq-7)}.lab-d1{--lab-k:var(--lab-div-1)}.lab-d2{--lab-k:var(--lab-div-2)}.lab-d3{--lab-k:var(--lab-div-3)}.lab-d4{--lab-k:var(--lab-div-4)}.lab-d5{--lab-k:var(--lab-div-5)}.lab-d6{--lab-k:var(--lab-div-6)}.lab-d7{--lab-k:var(--lab-div-7)}.lab-ink{--lab-k:var(--lab-mark)}.lab-soft{--lab-k:var(--ink-soft)}.lab-dim{--lab-k:var(--lab-dim)}.lab-accent{--lab-k:var(--lab-ref)}
/* ================= the lab kit's components (tools/lab-kit/lab_src.css) =================
   Readability first. The site's rules hold (two faces, lowercase, tokens only, red is rare, no boxes or fills for
   decoration) with three exceptions that belong to reading data, written down in system/README.md, "lab kit":
   data marks may be solid where legibility needs it, native scrollbars stay, and prefers-reduced-motion is followed. */

/* ---------- base: put class="lab" on <body> (or on the root of a viewer inside an app) ---------- */
.lab {
  margin: 0; background: var(--bg); color: var(--ink);
  font: 400 var(--type-body-size)/var(--type-body-line) var(--font-text);
  -webkit-text-size-adjust: 100%; text-size-adjust: 100%;
  -webkit-tap-highlight-color: transparent; caret-color: var(--accent);
  scrollbar-color: var(--line) transparent;
}
.lab[data-theme], .lab [data-theme] { background: var(--bg); color: var(--ink); }
html:has(> body.lab) { background: var(--bg); }
.lab *, .lab *::before, .lab *::after { box-sizing: border-box; }
.lab :focus-visible { outline: 1px solid var(--accent); outline-offset: 4px; }
.lab :focus:not(:focus-visible) { outline: none; }
.lab ::selection { color: var(--accent-text); -webkit-text-fill-color: var(--accent-text); background: color-mix(in oklab, var(--accent) 16%, transparent); text-shadow: none; }
[data-theme="dark"] .lab ::selection, .lab[data-theme="dark"] ::selection { background: color-mix(in oklab, var(--accent) 28%, transparent); }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .lab ::selection { background: color-mix(in oklab, var(--accent) 28%, transparent); } }
.lab .num, .lab td.num, .lab th.num { font-variant-numeric: tabular-nums lining-nums; }

/* links: ink, a dotted underline of rubedo cells; hover turns the words red */
.lab a { color: inherit; text-decoration: underline dotted var(--accent); text-decoration-thickness: 2px; text-underline-offset: 4px; }
.lab a:hover { color: var(--accent-text); }

/* buttons: words in label, no box, no fill; the state is in the words */
.lab-button, .lab button.lab-button {
  appearance: none; -webkit-appearance: none; background: none; border: 0; border-radius: var(--radius-none); padding: var(--space-1) 0; margin: 0;
  font: 400 var(--type-label-size)/1 var(--font-text); letter-spacing: var(--type-label-tracking); text-transform: lowercase;
  color: var(--ink-soft); cursor: pointer;
}
.lab-button:hover, .lab-button[aria-pressed="true"] { color: var(--ink); }
.lab-button:hover { text-decoration: underline dotted var(--accent); text-decoration-thickness: 2px; text-underline-offset: 5px; }

/* ---------- the page ---------- */
.lab-page {
  position: relative; z-index: 1; max-width: 1120px; margin: 0 auto;
  padding: 0 max(var(--space-4), env(safe-area-inset-right, 0px)) var(--space-7) max(var(--space-4), env(safe-area-inset-left, 0px));
}
.lab-prose { max-width: 65ch; }
.lab-section { margin-top: var(--space-7); }
.lab-section > * + * { margin-top: var(--space-4); }
.lab p { margin: 0; }
.lab p + p { margin-top: var(--space-3); }

/* header: the φ, the project's name, then whatever the viewer needs on the right */
.lab-header {
  display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-2) var(--space-4);
  padding: max(var(--space-4), env(safe-area-inset-top, 0px)) 0 var(--space-4);
}
.lab-mark {
  display: inline-block; flex: none; width: 24px; height: 33px; /* the φ's own ratio, 385 x 533 */
  background: var(--seal); -webkit-mask: var(--lab-phi) center / contain no-repeat; mask: var(--lab-phi) center / contain no-repeat;
}
a.lab-mark { text-decoration: none; }
.lab-project { font: 400 var(--type-label-size)/1 var(--font-text); letter-spacing: var(--type-label-tracking); text-transform: lowercase; color: var(--ink); text-decoration: none; }
.lab-project .lab-gloss { margin-left: var(--space-2); font-size: var(--type-gloss-title-size); letter-spacing: .02em; }
.lab-nav { display: flex; flex-wrap: wrap; gap: var(--space-2) var(--space-4); }
.lab-nav a { font: 400 var(--type-label-size)/1 var(--font-text); letter-spacing: var(--type-label-tracking); color: var(--ink-soft); text-decoration: none; }
.lab-nav a:hover, .lab-nav a[aria-current] { color: var(--ink); text-decoration: underline dotted var(--accent); text-decoration-thickness: 2px; text-underline-offset: 5px; }
.lab-controls { display: flex; gap: var(--space-4); margin-left: auto; }

/* the title: lowercase Aphesis Script, leaning, with its gloss above */
.lab-titles { margin-top: var(--space-6); }
.lab-gloss, .lab-gloss-title {
  font-family: var(--font-display); font-weight: 400; font-variation-settings: "wght" 400, "slnt" -12;
  color: var(--ink-soft); text-transform: lowercase;
}
.lab-gloss-title { display: block; font-size: var(--type-gloss-title-size); letter-spacing: var(--type-gloss-title-tracking); line-height: 1.4; }
.lab-title, .lab h1.lab-title {
  margin: var(--space-2) 0 0; padding-right: .2em;
  font-family: var(--font-display); font-weight: 400; font-variation-settings: "wght" 400, "slnt" -12;
  font-size: clamp(44px, 8vw, var(--type-title-size)); line-height: var(--type-title-line); text-transform: lowercase; color: var(--ink);
}
.lab-lede { max-width: 60ch; margin-top: var(--space-4) !important; font-size: var(--type-lede-size); line-height: var(--type-lede-line); }
.lab h2, .lab-h2 {
  margin: 0; padding-right: .2em; font-family: var(--font-display); font-weight: 500; font-variation-settings: "wght" 500, "slnt" -12;
  font-size: clamp(30px, 5vw, var(--type-heading-size)); line-height: var(--type-heading-line); text-transform: lowercase; color: var(--ink);
}
.lab h3, .lab-h3 {
  margin: 0; font: 400 var(--type-label-size)/1.4 var(--font-text); letter-spacing: var(--type-label-tracking); text-transform: lowercase; color: var(--ink-soft);
}
.lab-label { font: 400 var(--type-label-size)/1.4 var(--font-text); letter-spacing: var(--type-label-tracking); text-transform: lowercase; }
.lab-meta, .lab small.lab-meta { font: 400 var(--type-meta-size)/var(--type-meta-line) var(--font-text); letter-spacing: var(--type-meta-tracking); color: var(--ink-soft); }

/* a divider: one row of sparse cells, never a solid rule */
.lab-rule { height: var(--lab-cell); border: 0; margin: var(--space-5) 0; background: var(--ink-soft);
  -webkit-mask: var(--lab-stipple-2) 0 0 / 48px 48px; mask: var(--lab-stipple-2) 0 0 / 48px 48px; }

.lab-footer { margin-top: var(--space-7); padding-bottom: env(safe-area-inset-bottom, 0px); display: flex; flex-wrap: wrap; gap: var(--space-2) var(--space-4); }

/* ---------- the stipple ground (lab.js): off by default, static unless asked to drift ---------- */
.lab-fog { position: fixed; inset: 0; width: 100%; height: 100%; z-index: 0; pointer-events: none; image-rendering: pixelated; opacity: 0; }
.lab-fog.on { opacity: 1; }
/* text over the ground keeps a halo of ground, as on the site (aph-on-fog) */
.lab-fog-on .lab-page { text-shadow: 0 0 4px var(--bg), 0 0 10px var(--bg), 0 0 18px var(--bg); }
.lab-fog-on .lab-page [data-theme] { text-shadow: 0 0 4px var(--bg), 0 0 10px var(--bg), 0 0 18px var(--bg); }   /* a nested theme's own ground */
.lab-fog-on .lab-page svg text { paint-order: stroke; stroke: var(--bg); stroke-width: 3px; stroke-linejoin: round; }

/* ---------- stat tiles: a number and its words, grouped by space, a row of cells above ---------- */
.lab-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: var(--space-5) var(--space-4); margin: 0; padding: 0; }
.lab-stat { position: relative; padding-top: var(--space-3); margin: 0; min-width: 0; }
.lab-stat dt, .lab-stat dd { margin: 0; }
.lab-stat::before { content: ""; position: absolute; left: 0; top: 0; width: var(--space-6); height: 4px; background: var(--lab-k, var(--ink-soft));
  -webkit-mask: var(--lab-stipple-3) 0 0 / 48px 48px; mask: var(--lab-stipple-3) 0 0 / 48px 48px; }
.lab-stat-label { display: block; font: 400 var(--type-label-size)/1.4 var(--font-text); letter-spacing: var(--type-label-tracking); text-transform: lowercase; color: var(--ink-soft); }
.lab-stat-value { display: block; margin: var(--space-2) 0 0; font: 400 34px/1.1 var(--font-text); color: var(--ink); font-variant-numeric: tabular-nums lining-nums; overflow-wrap: anywhere; }
.lab-stat-value small { font-size: var(--type-body-size); color: var(--ink-soft); margin-left: .2em; }
.lab-stat-note { display: block; margin-top: var(--space-1); font: 400 var(--type-meta-size)/var(--type-meta-line) var(--font-text); letter-spacing: var(--type-meta-tracking); color: var(--ink-soft); }
/* the one figure that matters takes the red (one per screen) */
.lab-stat--ref { --lab-k: var(--accent); }
.lab-stat--ref .lab-stat-value { color: var(--accent-text); }

/* ---------- tables: no boxes; rows parted by a line of single cells ---------- */
.lab-table-wrap { overflow-x: auto; overscroll-behavior-x: contain; -webkit-overflow-scrolling: touch; }
.lab-table { width: 100%; border-collapse: collapse; font-size: var(--type-body-size); line-height: 1.5; }
.lab-table caption { caption-side: bottom; text-align: left; padding-top: var(--space-3); font: 400 var(--type-meta-size)/var(--type-meta-line) var(--font-text); letter-spacing: var(--type-meta-tracking); color: var(--ink-soft); }
.lab-table th, .lab-table td { padding: var(--space-2) var(--space-3); text-align: left; vertical-align: baseline;
  background: linear-gradient(to right, var(--line) 1px, transparent 1px) left bottom / 3px 1px repeat-x; }
.lab-table th:first-child, .lab-table td:first-child { padding-left: 0; }
.lab-table th:last-child, .lab-table td:last-child { padding-right: 0; }
.lab-table thead th { font: 400 var(--type-label-size)/1.4 var(--font-text); letter-spacing: var(--type-label-tracking); text-transform: lowercase; color: var(--ink-soft); white-space: nowrap;
  background: linear-gradient(to right, var(--ink-soft) 2px, transparent 2px) left bottom / 4px 2px repeat-x; padding-bottom: var(--space-2); }
.lab-table tbody th { font-weight: 400; color: var(--ink); }
.lab-table .num { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums lining-nums; }
.lab-table tr.lab-ref-row > * { color: var(--accent-text); }
.lab-table--dense { font-size: var(--type-label-size); }
.lab-table--dense th, .lab-table--dense td { padding-top: var(--space-1); padding-bottom: var(--space-1); }
/* status words: pass and fail always say so in words; the colour only follows */
.lab-pass { color: var(--lab-pass); }
.lab-fail { color: var(--lab-fail); }

/* ---------- the honesty table: what kind of knowing each claim rests on ----------
   measured: a solid square of cells (observed directly). modelled: dense stipple (computed by a model from what was
   measured). tested: a ring of cells (checked against a test, and it held). hypothesis: sparse stipple, in red
   (not checked yet). The word is always written beside the mark. */
.lab-ev { display: inline-flex; align-items: center; gap: var(--space-2); white-space: nowrap; color: var(--ink); }
.lab-ev::before { content: ""; flex: none; width: 14px; height: 14px; background: currentColor; }
.lab-ev[data-ev="modelled"]::before { -webkit-mask: var(--lab-stipple-3) 0 0 / 48px 48px; mask: var(--lab-stipple-3) 0 0 / 48px 48px; }
.lab-ev[data-ev="tested"]::before { -webkit-mask: var(--lab-ring) 0 0 / 14px 14px no-repeat; mask: var(--lab-ring) 0 0 / 14px 14px no-repeat; }
.lab-ev[data-ev="hypothesis"] { color: var(--accent-text); }
.lab-ev[data-ev="hypothesis"]::before { -webkit-mask: var(--lab-stipple-1) 0 0 / 48px 48px; mask: var(--lab-stipple-1) 0 0 / 48px 48px; }
.lab-honesty td:first-child { max-width: 44ch; }
.lab-honesty .lab-ev-key { display: flex; flex-wrap: wrap; gap: var(--space-2) var(--space-4); }

/* ---------- callouts: a column of cells on the left, never a box ---------- */
.lab-callout { position: relative; max-width: 65ch; padding: var(--space-1) 0 var(--space-1) var(--space-4); margin: 0; }
.lab-callout::before { content: ""; position: absolute; left: 0; top: var(--space-1); bottom: var(--space-1); width: 6px; background: var(--ink-soft);
  -webkit-mask: var(--lab-stipple-3) 0 0 / 48px 48px; mask: var(--lab-stipple-3) 0 0 / 48px 48px; }
.lab-callout-label { display: block; margin-bottom: var(--space-1); font: 400 var(--type-label-size)/1.4 var(--font-text); letter-spacing: var(--type-label-tracking); text-transform: lowercase; color: var(--ink-soft); }
.lab-callout--alert::before { background: var(--accent); }
.lab-callout--alert .lab-callout-label { color: var(--accent-text); }

/* ---------- code: the typewriter face, a column of sparse cells on the left ---------- */
.lab pre, .lab-code {
  position: relative; margin: 0; padding: var(--space-1) 0 var(--space-1) var(--space-4); overflow-x: auto; overscroll-behavior-x: contain;
  font: 400 var(--type-label-size)/1.75 var(--font-text); color: var(--ink); tab-size: 2; white-space: pre;
}
.lab pre::before, .lab-code::before { content: ""; position: absolute; left: 0; top: var(--space-1); bottom: var(--space-1); width: 6px; background: var(--ink-soft);
  -webkit-mask: var(--lab-stipple-1) 0 0 / 48px 48px; mask: var(--lab-stipple-1) 0 0 / 48px 48px; }
.lab pre code { font: inherit; background: none; }
.lab pre[data-label] { padding-top: calc(var(--space-1) + 20px); }
.lab pre[data-label]::after { content: attr(data-label); position: absolute; left: var(--space-4); top: var(--space-1); font: 400 var(--type-meta-size)/1 var(--font-text); letter-spacing: var(--type-meta-tracking); color: var(--ink-soft); }
.lab pre .c, .lab pre .lab-comment { color: var(--ink-soft); }
.lab :not(pre) > code { font: inherit; font-size: .94em; color: var(--ink);
  background: linear-gradient(to right, var(--ink-soft) 1px, transparent 1px) left bottom / 3px 1px repeat-x; padding-bottom: 1px; }

/* ---------- legend: a key of marks, words in the text colours (never in the series colour) ---------- */
.lab-legend { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2) var(--space-4); margin: 0; padding: 0; list-style: none;
  font: 400 var(--type-label-size)/1.4 var(--font-text); letter-spacing: .06em; color: var(--ink-soft); }
.lab-key { display: inline-flex; align-items: center; gap: var(--space-2); }
.lab-key::before { content: ""; flex: none; width: 18px; height: var(--lab-stroke); background: var(--lab-k, var(--lab-mark)); }
.lab-key--dot::before { width: var(--lab-dot); height: var(--lab-dot); }
.lab-key--bar::before { width: 10px; height: 10px; }
.lab-key--band::before { width: 18px; height: 10px; -webkit-mask: var(--lab-stipple-1) 0 0 / 48px 48px; mask: var(--lab-stipple-1) 0 0 / 48px 48px; }
.lab-key--dotted::before { background: linear-gradient(to right, var(--lab-k, var(--lab-mark)) 2px, transparent 2px) 0 0 / 4px 2px repeat-x; }
.lab-key--rule::before { height: 1px; background: linear-gradient(to right, var(--lab-k, var(--lab-ref)) 2px, transparent 2px) 0 0 / 4px 1px repeat-x; }
.lab-key--ramp::before { width: 84px; height: 10px; background: var(--lab-ramp, linear-gradient(to right, var(--lab-seq-1), var(--lab-seq-4), var(--lab-seq-7))); }
.lab-key--ramp.lab-key--div::before { background: linear-gradient(to right, var(--lab-div-1), var(--lab-div-4), var(--lab-div-7)); }

/* ---------- charts: a styling layer for SVG from D3, Observable Plot or Vega-Lite ----------
   Wrap the <svg> in .lab-chart. Axes and grids are recessive (hairlines, dotted cells), every word is in the text
   face and the text colours, marks paint with --lab-k (set by .lab-c1..8, .lab-ink, .lab-accent...). */
.lab-chart { margin: 0; color: var(--lab-axis-text); }
.lab-chart > svg, .lab-chart svg.lab-svg { display: block; max-width: 100%; height: auto; overflow: visible; }
.lab-chart svg { font-family: var(--font-text); font-size: var(--type-meta-size); }
.lab-chart text { fill: var(--lab-axis-text); font-family: var(--font-text); font-size: var(--type-meta-size); letter-spacing: .06em; font-variant-numeric: tabular-nums lining-nums; }
.lab-chart figcaption, .lab-chart .lab-chart-caption { margin-top: var(--space-2); font: 400 var(--type-meta-size)/var(--type-meta-line) var(--font-text); letter-spacing: var(--type-meta-tracking); color: var(--ink-soft); }
.lab-chart .lab-chart-head { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: var(--space-2) var(--space-4); margin-bottom: var(--space-3); }
/* d3-axis (and anything drawn the same way: .domain, .tick line, .tick text) */
.lab-chart .domain { stroke: var(--lab-axis); stroke-width: var(--lab-hair); fill: none; shape-rendering: crispEdges; }
.lab-chart .tick line { stroke: var(--lab-axis); stroke-width: var(--lab-hair); shape-rendering: crispEdges; }
.lab-chart .tick text { fill: var(--lab-axis-text); }
/* gridlines: a d3 axis with tickSize(-inner) inside .lab-grid, or any lines in .lab-grid */
.lab-chart .lab-grid line, .lab-chart .lab-grid path:not(.domain), .lab-chart line.lab-grid { stroke: var(--lab-grid); stroke-width: var(--lab-hair); stroke-dasharray: 1 3; shape-rendering: crispEdges; }
.lab-chart .lab-grid .domain, .lab-chart .lab-grid text { display: none; }
.lab-chart .lab-axis-title { fill: var(--lab-axis-text); letter-spacing: var(--type-meta-tracking); }
/* Observable Plot (its own styles are zero-specificity, so these win) */
.lab-chart svg[class^="plot-"], .lab-chart svg[class*=" plot-"] { --plot-background: transparent; background: transparent; color: var(--lab-axis-text); font-family: var(--font-text); font-size: var(--type-meta-size); }
.lab-chart [aria-label$="-grid"] :is(line, path) { stroke: var(--lab-grid); stroke-opacity: 1; stroke-dasharray: 1 3; }
.lab-chart [aria-label$="-axis tick"] path, .lab-chart [aria-label$="-axis tick"] line { stroke: var(--lab-axis); }
.lab-chart [aria-label$="rule"] line { stroke: var(--lab-axis); }
.lab-chart figure[class^="plot-"] { margin: 0; }
.lab-chart [class$="-swatches"], .lab-chart div[class*="-swatches"] { font-family: var(--font-text); font-size: var(--type-label-size); color: var(--ink-soft); }
/* Vega and Vega-Lite (SVG renderer); Lab.vega() is the better path, these catch what a spec leaves out */
.lab-chart .vega-embed { display: block; }
.lab-chart .marks .background, .lab-chart .role-frame > g > path.background { fill: transparent; stroke: none; }
.lab-chart .role-axis-grid :is(line, path) { stroke: var(--lab-grid); stroke-dasharray: 1 3; }
.lab-chart .role-axis-domain :is(line, path), .lab-chart .role-axis-tick :is(line, path) { stroke: var(--lab-axis); }
.lab-chart .role-axis-label text, .lab-chart .role-axis-title text, .lab-chart .role-legend-label text, .lab-chart .role-legend-title text { fill: var(--lab-axis-text); font-family: var(--font-text); }
.lab-chart .role-title-text text { fill: var(--ink); font-family: var(--font-display); }
.lab-chart .vega-embed summary { display: none; }

/* marks */
.lab-chart .lab-halo { fill: none; stroke: var(--bg); stroke-width: calc(var(--lab-stroke) * 3); stroke-linejoin: round; stroke-linecap: round; }   /* under a line that crosses a band or other marks */
.lab-chart .lab-line { fill: none; stroke: var(--lab-k, var(--lab-mark)); stroke-width: var(--lab-stroke); stroke-linejoin: round; stroke-linecap: round; }
.lab-chart .lab-line.lab-dotted { stroke-dasharray: 2 3; stroke-linecap: butt; }    /* an expectation, a model: a line of cells */
.lab-chart .lab-step { fill: none; stroke: var(--lab-k, var(--lab-mark)); stroke-width: var(--lab-stroke); stroke-linejoin: miter; }
.lab-chart .lab-dot { fill: var(--lab-k, var(--lab-mark)); stroke: var(--bg); stroke-width: 1; shape-rendering: crispEdges; }
.lab-chart .lab-bar { fill: var(--lab-k, var(--lab-mark)); shape-rendering: crispEdges; }
.lab-chart .lab-cell { fill: var(--lab-k, var(--lab-mark)); stroke: var(--bg); stroke-width: 2; shape-rendering: crispEdges; }
.lab-chart .lab-rule-ref { stroke: var(--lab-k, var(--lab-ref)); stroke-width: var(--lab-hair); stroke-dasharray: 2 2; shape-rendering: crispEdges; }
.lab-chart .lab-ring { fill: none; stroke: var(--lab-ref); stroke-width: 1.5; }
.lab-chart .lab-label { fill: var(--ink); paint-order: stroke; stroke: var(--bg); stroke-width: 3px; stroke-linejoin: round; }                 /* a direct label: text colour, never the series colour */
.lab-chart .lab-label-soft { fill: var(--ink-soft); }
.lab-chart .lab-faded { opacity: var(--lab-dim-alpha); }
/* areas and confidence bands: stipple where lab.js is loaded (the masks it adds), a light wash where it is not */
.lab-chart .lab-band, .lab-chart .lab-area { fill: var(--lab-k, var(--lab-mark)); fill-opacity: .18; stroke: none; }
.lab-js .lab-chart .lab-band { fill-opacity: 1; mask: url(#lab-stipple-1); }   /* a range: sparse, so the line on it reads */
.lab-js .lab-chart .lab-area { fill-opacity: 1; mask: url(#lab-stipple-2); }   /* a magnitude under a series */
.lab-js .lab-chart .lab-sparse { mask: url(#lab-stipple-1); }
.lab-js .lab-chart .lab-medium { mask: url(#lab-stipple-2); }
.lab-js .lab-chart .lab-dense { mask: url(#lab-stipple-3); }
.lab-js .lab-chart .lab-bar.lab-stippled { mask: url(#lab-stipple-3); }
/* hover: a hairline of ink around the mark under the pointer, nothing moves */
.lab-chart :is(.lab-dot, .lab-bar, .lab-cell)[data-tip]:hover, .lab-chart :is(.lab-dot, .lab-bar, .lab-cell):focus-visible { stroke: var(--ink); stroke-width: 1.5; outline: none; }
.lab-chart .lab-cross { stroke: var(--ink-soft); stroke-width: var(--lab-hair); stroke-dasharray: 1 2; pointer-events: none; }

/* ---------- receding header and footer: what scrolls fades out under them (since 1.1) ----------
   The lab kit's form of the site's bands (.aph-bands): content passing under a sticky header, or over a sticky footer,
   is faint under most of it and comes clear just past it, through the same eased band (50px: alpha 0, .12 at half,
   .45 at four fifths, 1). Never a solid bar: the veil is the ground's own colour, so no edge is seen, only text
   receding.
   - .lab-header--sticky (and .lab-footer--sticky): for a page whose document scrolls. A veil of the ground under the
     header, opaque over the header's own box and easing out over --lab-band below it. Inside .lab-page, as the
     header usually is.
   - .lab-header--blur: adds a faint blur (--lab-veil-blur, 4px) under the same graded mask, where the browser has
     backdrop-filter. Optional and subtle: dropped when the stipple ground is on (cells are never smeared), and for
     readers who ask for less transparency.
   - .lab-bands: for an app whose own container scrolls (a full-height pane). A mask on the scroller, exactly the
     site's bands, sized by --lab-header-h and --lab-footer-h (lab.js measures sticky headers and footers and sets
     them). .lab-bands--inner for a box inside the page: no header, no safe-area insets, only the bands.
   The header's height, the band and the blur are tokens (lab-header-h, lab-band, lab-veil-blur). Nothing moves. */
:root {
  --lab-header-h: calc(env(safe-area-inset-top, 0px) + 73px);   /* lab.js replaces it with the sticky header's own height */
  --lab-footer-h: env(safe-area-inset-bottom, 0px);
  --lab-gutter: max(var(--space-4), env(safe-area-inset-left, 0px));
  /* the veil, top down: the ground over the header's box, then the eased band (1 - the site's mask alpha) */
  --lab-veil: linear-gradient(to bottom, var(--bg) calc(100% - var(--lab-band)),
    color-mix(in oklab, var(--bg) 88%, transparent) calc(100% - var(--lab-band) * .5),
    color-mix(in oklab, var(--bg) 55%, transparent) calc(100% - var(--lab-band) * .2), transparent);
  --lab-veil-mask: linear-gradient(to bottom, #000 calc(100% - var(--lab-band)), rgba(0, 0, 0, .55) calc(100% - var(--lab-band) * .5), transparent);
}
.lab-header--sticky, .lab-footer--sticky { position: sticky; z-index: 10; isolation: isolate; }
.lab-header--sticky { top: 0; }
.lab-footer--sticky { bottom: 0; }
.lab-header--sticky::before, .lab-footer--sticky::before, .lab-header--blur::after, .lab-footer--blur::after {
  content: ""; position: absolute; left: calc(-1 * var(--lab-gutter)); right: calc(-1 * var(--lab-gutter)); pointer-events: none;
}
.lab-header--sticky::before { z-index: -1; top: 0; bottom: calc(-1 * var(--lab-band)); background: var(--lab-veil); }
.lab-footer--sticky::before { z-index: -1; bottom: 0; top: calc(-1 * var(--lab-band)); background: var(--lab-veil); transform: scaleY(-1); }
@supports ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .lab-header--blur::after, .lab-footer--blur::after {
    z-index: -2; -webkit-backdrop-filter: blur(var(--lab-veil-blur)); backdrop-filter: blur(var(--lab-veil-blur));
    -webkit-mask-image: var(--lab-veil-mask); mask-image: var(--lab-veil-mask);
  }
  .lab-header--blur::after { top: 0; bottom: calc(-1 * var(--lab-band)); }
  .lab-footer--blur::after { bottom: 0; top: calc(-1 * var(--lab-band)); transform: scaleY(-1); }
}
.lab-fog-on .lab-header--blur::after, .lab-fog-on .lab-footer--blur::after { display: none; }
@media (prefers-reduced-transparency: reduce) { .lab-header--blur::after, .lab-footer--blur::after { display: none; } }
/* a link to a part of the page lands below the header, not under it */
html:has(.lab-header--sticky) { scroll-padding-top: calc(var(--lab-header-h) + var(--lab-band) * .5); }
html:has(.lab-footer--sticky) { scroll-padding-bottom: calc(var(--lab-footer-h) + var(--lab-band) * .5); }
/* a scroller that is the page (an app's pane): the site's bands, as a mask */
.lab-bands {
  --lab-bands-top: var(--lab-header-h); --lab-bands-bottom: var(--lab-footer-h);
  --lab-bands-mask: linear-gradient(to bottom, transparent var(--lab-bands-top),
    rgba(0, 0, 0, .12) calc(var(--lab-bands-top) + var(--lab-band) * .5), rgba(0, 0, 0, .45) calc(var(--lab-bands-top) + var(--lab-band) * .8),
    #000 calc(var(--lab-bands-top) + var(--lab-band)), #000 calc(100% - var(--lab-bands-bottom) - var(--lab-band)),
    rgba(0, 0, 0, .45) calc(100% - var(--lab-bands-bottom) - var(--lab-band) * .8), rgba(0, 0, 0, .12) calc(100% - var(--lab-bands-bottom) - var(--lab-band) * .5),
    transparent calc(100% - var(--lab-bands-bottom)));
  -webkit-mask-image: var(--lab-bands-mask); mask-image: var(--lab-bands-mask);
  overflow-y: auto; overscroll-behavior: contain;
}
.lab-bands--inner { --lab-bands-top: 0px; --lab-bands-bottom: 0px; }
/* content at rest starts below the top band and ends above the bottom one */
.lab-bands > :first-child { margin-top: calc(var(--lab-bands-top) + var(--lab-band) * .8); }
.lab-bands > :last-child { margin-bottom: calc(var(--lab-bands-bottom) + var(--lab-band) * .8); }

/* ---------- tooltip (lab.js: any element with data-tip inside .lab) ---------- */
.lab-tip {
  position: fixed; left: 0; top: 0; z-index: 15; pointer-events: none; max-width: min(320px, calc(100vw - 32px));
  padding: var(--space-2) var(--space-3); background: var(--bg); color: var(--ink); border-left: 1px solid var(--accent);
  font: 400 var(--type-meta-size)/1.6 var(--font-text); letter-spacing: .06em; white-space: pre-line;
  opacity: 0; transition: opacity var(--duration-quick) var(--easing-settle);
}
.lab-tip.on { opacity: 1; }

/* ---------- 3D point clouds: the canvas is the ground; points are square cells (see the README) ---------- */
.lab-cloud { position: relative; margin: 0; }
.lab-cloud canvas { display: block; width: 100%; height: auto; aspect-ratio: 16 / 10; background: var(--bg); touch-action: none; cursor: grab; image-rendering: pixelated; }
.lab-cloud canvas:active { cursor: grabbing; }

/* ---------- specimens: a theme shown inside the other (the demo's side-by-side) ---------- */
.lab-specimen { padding: var(--space-4); }

/* ---------- motion: minimal, and none for those who ask ---------- */
@media (prefers-reduced-motion: reduce) {
  .lab *, .lab *::before, .lab *::after { transition-duration: 0s !important; animation-duration: 0s !important; animation-iteration-count: 1 !important; }
}

/* ---------- phones ---------- */
@media (max-width: 560px) {
  .lab-controls { margin-left: 0; width: 100%; }
  /* a sticky header stays short: the name and the controls on one line, the nav on one scrolling line beneath */
  .lab-header--sticky { flex-wrap: wrap; gap: var(--space-2) var(--space-3); padding-bottom: var(--space-2); }
  .lab-header--sticky .lab-project .lab-gloss { display: none; }
  .lab-header--sticky .lab-controls { width: auto; margin-left: auto; gap: var(--space-3); }
  .lab-header--sticky .lab-button { letter-spacing: .1em; }
  .lab-header--sticky .lab-nav { order: 3; width: 100%; flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; overscroll-behavior-x: contain; padding-bottom: var(--space-1); }
  .lab-header--sticky .lab-nav::-webkit-scrollbar { display: none; }
  .lab-header--sticky .lab-nav a { white-space: nowrap; }
  .lab-titles { margin-top: var(--space-5); }
  .lab-section { margin-top: var(--space-6); }
  .lab-stat-value { font-size: 28px; }
  .lab-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* ---------- print: the light theme, no ground, no controls ---------- */
@media print {
  .lab-fog, .lab-controls, .lab-tip { display: none !important; }
  .lab { background: none; }
}
