/* * tokens.css — single source-of-truth for theme + type tokens. * Imported by scaffold/app/globals.css and STYLE_GUIDE.html. * * Themes (7 modes via data-theme): * flexoki | flexoki-dark | uchu | uchu-dark | humdrum | humdrum-dark | eink * * Color levels (per family — red, orange, yellow, green, cyan, blue, purple, pink): * --{color}-200 — lightest accent, hairline borders, soft fills * --{color}-300 — soft accent, hover backgrounds * --{color}-400 — DEFAULT (also exposed as --{color} alias) * --{color}-500 — pressed/active * --{color}-600 — strong text on light, prominent fills * * Sources: * Flexoki — github.com/kepano/flexoki (kepano) * Uchu — github.com/Passw/NeverCease-uchu, uchu.style * Humdrum — custom; blue base #0f80ea per spec, OKLCH-derived levels */ /* ─── Font face declarations ───────────────────────────────────────── */ /* Awke — display. Three weights. */ @font-face { font-family: "Awke"; src: url("/static/fonts/Awke-Thin.woff2") format("woff2"); font-weight: 100; font-style: normal; font-display: swap; } @font-face { font-family: "Awke"; src: url("/static/fonts/Awke-Regular.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; } @font-face { font-family: "Awke"; src: url("/static/fonts/Awke-Bold.woff2") format("woff2"); font-weight: 700; font-style: normal; font-display: swap; } /* Untitled Sans — body. Light/Regular/Medium/Bold/Black + italics. */ @font-face { font-family: "Untitled Sans"; src: url("/static/fonts/untitled-sans-light.woff2") format("woff2"); font-weight: 300; font-style: normal; font-display: swap; } @font-face { font-family: "Untitled Sans"; src: url("/static/fonts/untitled-sans-light-italic.woff2") format("woff2"); font-weight: 300; font-style: italic; font-display: swap; } @font-face { font-family: "Untitled Sans"; src: url("/static/fonts/untitled-sans-regular.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; } @font-face { font-family: "Untitled Sans"; src: url("/static/fonts/untitled-sans-regular-italic.woff2") format("woff2"); font-weight: 400; font-style: italic; font-display: swap; } @font-face { font-family: "Untitled Sans"; src: url("/static/fonts/untitled-sans-medium.woff2") format("woff2"); font-weight: 500; font-style: normal; font-display: swap; } @font-face { font-family: "Untitled Sans"; src: url("/static/fonts/untitled-sans-medium-italic.woff2") format("woff2"); font-weight: 500; font-style: italic; font-display: swap; } @font-face { font-family: "Untitled Sans"; src: url("/static/fonts/untitled-sans-bold.woff2") format("woff2"); font-weight: 700; font-style: normal; font-display: swap; } @font-face { font-family: "Untitled Sans"; src: url("/static/fonts/untitled-sans-bold-italic.woff2") format("woff2"); font-weight: 700; font-style: italic; font-display: swap; } @font-face { font-family: "Untitled Sans"; src: url("/static/fonts/untitled-sans-black.woff2") format("woff2"); font-weight: 900; font-style: normal; font-display: swap; } @font-face { font-family: "Untitled Sans"; src: url("/static/fonts/untitled-sans-black-italic.woff2") format("woff2"); font-weight: 900; font-style: italic; font-display: swap; } /* Name Mono — variable font preferred, static fallbacks. */ @font-face { font-family: "Name Mono"; src: url("/static/fonts/ATNameMonoVariable-Regular.woff2") format("woff2-variations"), url("/static/fonts/ATNameMono-Regular.woff2") format("woff2"); font-weight: 100 900; font-style: normal; font-display: swap; } @font-face { font-family: "Name Mono"; src: url("/static/fonts/ATNameMonoVariable-RegularItalic.woff2") format("woff2-variations"), url("/static/fonts/ATNameMono-Italic.woff2") format("woff2"); font-weight: 100 900; font-style: italic; font-display: swap; } /* ─── Global tokens (shared across all themes) ─────────────────────── */ :root { --font-display: "Awke", "Untitled Sans", sans-serif; --font-body: "Untitled Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; --font-mono: "Name Mono", ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace; --text-xs: 0.75rem; --text-sm: 0.875rem; --text-base: 1rem; --text-lg: 1.125rem; --text-xl: 1.25rem; --text-2xl: 1.5rem; --text-3xl: 1.875rem; --text-4xl: 2.25rem; --text-5xl: 3rem; --leading-tight: 1.2; --leading-normal: 1.5; --leading-relax: 1.7; --space-1: 0.25rem; --space-2: 0.5rem; --space-3: 0.75rem; --space-4: 1rem; --space-5: 1.25rem; --space-6: 1.5rem; --space-8: 2rem; --space-10: 2.5rem; --space-12: 3rem; --space-16: 4rem; --radius-sm: 4px; --radius: 8px; --radius-lg: 12px; --radius-xl: 16px; --tap-min: 44px; /* * Derived semantic tokens — resolve per-theme via the active --accent + --bg. * color-mix evaluates at use-site, so the same :root declaration works for * every theme without repetition. */ --accent-subtle: color-mix(in oklab, var(--accent) 12%, var(--bg)); --accent-subtle-border: var(--accent); --focus-ring: var(--accent); } /* ═══════════════════════════════════════════════════════════════════ FLEXOKI — kepano canonical (github.com/kepano/flexoki) ═══════════════════════════════════════════════════════════════════ */ :root, [data-theme="flexoki"] { /* Surfaces */ --bg: #FFFCF0; /* paper */ --bg-card: #F2F0E5; /* 50 */ --bg-elevated: #F2F0E5; --bg-hover: rgba(0, 0, 0, 0.04); --bg-active: rgba(0, 0, 0, 0.08); --border: #E6E4D9; /* 100 */ --border-strong: #CECDC3; /* 200 */ --text: #100F0F; /* black */ --text-muted: #6F6E69; /* 600 */ --text-faint: #B7B5AC; /* 300 */ --text-accent: #100F0F; --text-on-accent:#FFFCF0; --selection: #DDF1E4; /* cyan-50 */ --accent: #24837B; /* cyan-600 */ /* Red */ --red-200: #F89A8A; --red-300: #E8705F; --red-400: #D14D41; --red-500: #C03E35; --red-600: #AF3029; --red: var(--red-400); /* Orange */ --orange-200: #F9AE77; --orange-300: #EC8B49; --orange-400: #DA702C; --orange-500: #CB6120; --orange-600: #BC5215; --orange: var(--orange-400); /* Yellow */ --yellow-200: #ECCB60; --yellow-300: #DFB431; --yellow-400: #D0A215; --yellow-500: #BE9207; --yellow-600: #AD8301; --yellow: var(--yellow-400); /* Green */ --green-200: #BEC97E; --green-300: #A0AF54; --green-400: #879A39; --green-500: #768D21; --green-600: #66800B; --green: var(--green-400); /* Cyan */ --cyan-200: #87D3C3; --cyan-300: #5ABDAC; --cyan-400: #3AA99F; --cyan-500: #2F968D; --cyan-600: #24837B; --cyan: var(--cyan-400); /* Blue */ --blue-200: #92BFDB; --blue-300: #66A0C8; --blue-400: #4385BE; --blue-500: #3171B2; --blue-600: #205EA6; --blue: var(--blue-400); /* Purple */ --purple-200: #C4B9E0; --purple-300: #A699D0; --purple-400: #8B7EC8; --purple-500: #735EB5; --purple-600: #5E409D; --purple: var(--purple-400); /* Pink (Flexoki magenta) */ --pink-200: #F4A4C2; --pink-300: #E47DA8; --pink-400: #CE5D97; --pink-500: #B74583; --pink-600: #A02F6F; --pink: var(--pink-400); } [data-theme="flexoki-dark"] { --bg: #100F0F; /* black */ --bg-card: #1C1B1A; /* 950 */ --bg-elevated: #282726; /* 900 */ --bg-hover: rgba(255, 255, 255, 0.05); --bg-active: rgba(255, 255, 255, 0.1); --border: #282726; /* 900 */ --border-strong: #403E3C; /* 800 */ --text: #CECDC3; /* 200 */ --text-muted: #878580; /* 500 */ --text-faint: #575653; /* 700 */ --text-accent: #CECDC3; --text-on-accent:#100F0F; --selection: #122F2C; /* cyan-900 */ --accent: #3AA99F; /* cyan-400 */ --red-200: #F89A8A; --red-300: #E8705F; --red-400: #D14D41; --red-500: #C03E35; --red-600: #AF3029; --red: var(--red-400); --orange-200: #F9AE77; --orange-300: #EC8B49; --orange-400: #DA702C; --orange-500: #CB6120; --orange-600: #BC5215; --orange: var(--orange-400); --yellow-200: #ECCB60; --yellow-300: #DFB431; --yellow-400: #D0A215; --yellow-500: #BE9207; --yellow-600: #AD8301; --yellow: var(--yellow-400); --green-200: #BEC97E; --green-300: #A0AF54; --green-400: #879A39; --green-500: #768D21; --green-600: #66800B; --green: var(--green-400); --cyan-200: #87D3C3; --cyan-300: #5ABDAC; --cyan-400: #3AA99F; --cyan-500: #2F968D; --cyan-600: #24837B; --cyan: var(--cyan-400); --blue-200: #92BFDB; --blue-300: #66A0C8; --blue-400: #4385BE; --blue-500: #3171B2; --blue-600: #205EA6; --blue: var(--blue-400); --purple-200: #C4B9E0; --purple-300: #A699D0; --purple-400: #8B7EC8; --purple-500: #735EB5; --purple-600: #5E409D; --purple: var(--purple-400); --pink-200: #F4A4C2; --pink-300: #E47DA8; --pink-400: #CE5D97; --pink-500: #B74583; --pink-600: #A02F6F; --pink: var(--pink-400); } /* ═══════════════════════════════════════════════════════════════════ UCHU — canonical OKLCH (github.com/Passw/NeverCease-uchu, uchu.style) Levels 2-6 of canonical 1-9 scale → mapped to 200-600. ═══════════════════════════════════════════════════════════════════ */ [data-theme="uchu"] { --bg: oklch(99.4% 0 0); /* yang */ --bg-card: oklch(95.57% 0.003 286.35); /* gray-1 */ --bg-elevated: oklch(99.4% 0 0); --bg-hover: rgba(0, 0, 0, 0.035); --bg-active: rgba(0, 0, 0, 0.07); --border: oklch(91.87% 0.003 264.54); /* yin-1 */ --border-strong: oklch(84.61% 0.004 286.31); /* yin-2 */ --text: oklch(14.38% 0.007 256.88); /* yin */ --text-muted: oklch(43.87% 0.005 271.3); /* yin-7 */ --text-faint: oklch(69.17% 0.004 247.88); /* yin-4 */ --text-accent: oklch(14.38% 0.007 256.88); --text-on-accent:oklch(99.4% 0 0); --selection: oklch(89.1% 0.046 305.24); /* purple-1 */ --accent: oklch(58.47% 0.181 302.06); /* purple-4 */ --red-200: oklch(78.78% 0.109 4.54); --red-300: oklch(69.86% 0.162 7.82); --red-400: oklch(62.73% 0.209 12.37); --red-500: oklch(58.63% 0.231 19.6); --red-600: oklch(54.41% 0.214 19.06); --red: var(--red-400); --orange-200: oklch(88.37% 0.0726 55.8); --orange-300: oklch(83.56% 0.1075 56.49); --orange-400: oklch(78.75% 0.1416 54.33); --orange-500: oklch(74.61% 0.171 51.56); --orange-600: oklch(69.33% 0.157 52.18); --orange: var(--orange-400); --yellow-200: oklch(95% 0.07 92.39); --yellow-300: oklch(92.76% 0.098 92.58); --yellow-400: oklch(90.92% 0.125 92.56); --yellow-500: oklch(89% 0.146 91.5); --yellow-600: oklch(82.39% 0.133 91.5); --yellow: var(--yellow-400); --green-200: oklch(88.77% 0.096 147.71); --green-300: oklch(83.74% 0.139 146.57); --green-400: oklch(79.33% 0.179 145.62); --green-500: oklch(75.23% 0.209 144.64); --green-600: oklch(70.03% 0.194 144.71); --green: var(--green-400); /* Uchu has no canonical "cyan" — derive from blue+green hue middle. */ --cyan-200: oklch(85% 0.07 200); --cyan-300: oklch(78% 0.10 200); --cyan-400: oklch(70% 0.13 200); --cyan-500: oklch(63% 0.14 200); --cyan-600: oklch(55% 0.13 200); --cyan: var(--cyan-400); --blue-200: oklch(80.17% 0.091 258.88); --blue-300: oklch(70.94% 0.136 258.06); --blue-400: oklch(62.39% 0.181 258.33); --blue-500: oklch(54.87% 0.222 260.33); --blue-600: oklch(51.15% 0.204 260.17); --blue: var(--blue-400); --purple-200: oklch(78.68% 0.091 305); --purple-300: oklch(68.5% 0.136 303.78); --purple-400: oklch(58.47% 0.181 302.06); --purple-500: oklch(49.39% 0.215 298.31); --purple-600: oklch(46.11% 0.198 298.4); --purple: var(--purple-400); --pink-200: oklch(92.14% 0.046 352.31); --pink-300: oklch(88.9% 0.066 354.39); --pink-400: oklch(85.43% 0.09 354.1); --pink-500: oklch(82.23% 0.112 355.33); --pink-600: oklch(76.37% 0.101 355.37); --pink: var(--pink-400); } [data-theme="uchu-dark"] { --bg: oklch(14.38% 0.007 256.88); /* yin */ --bg-card: oklch(25.11% 0.006 258.36); /* yin-9 */ --bg-elevated: oklch(35.02% 0.005 236.66); /* yin-8 */ --bg-hover: rgba(255, 255, 255, 0.05); --bg-active: rgba(255, 255, 255, 0.1); --border: oklch(35.02% 0.005 236.66); /* yin-8 */ --border-strong: oklch(43.87% 0.005 271.3); /* yin-7 */ --text: oklch(91.87% 0.003 264.54); /* yin-1 */ --text-muted: oklch(69.17% 0.004 247.88); /* yin-4 */ --text-faint: oklch(52.79% 0.005 271.32); /* yin-6 */ --text-accent: oklch(91.87% 0.003 264.54); --text-on-accent:oklch(14.38% 0.007 256.88); --selection: oklch(36.01% 0.145 298.35); /* purple-9 */ --accent: oklch(68.5% 0.136 303.78); /* purple-3 */ --red-200: oklch(78.78% 0.109 4.54); --red-300: oklch(69.86% 0.162 7.82); --red-400: oklch(62.73% 0.209 12.37); --red-500: oklch(58.63% 0.231 19.6); --red-600: oklch(54.41% 0.214 19.06); --red: var(--red-400); --orange-200: oklch(88.37% 0.0726 55.8); --orange-300: oklch(83.56% 0.1075 56.49); --orange-400: oklch(78.75% 0.1416 54.33); --orange-500: oklch(74.61% 0.171 51.56); --orange-600: oklch(69.33% 0.157 52.18); --orange: var(--orange-400); --yellow-200: oklch(95% 0.07 92.39); --yellow-300: oklch(92.76% 0.098 92.58); --yellow-400: oklch(90.92% 0.125 92.56); --yellow-500: oklch(89% 0.146 91.5); --yellow-600: oklch(82.39% 0.133 91.5); --yellow: var(--yellow-400); --green-200: oklch(88.77% 0.096 147.71); --green-300: oklch(83.74% 0.139 146.57); --green-400: oklch(79.33% 0.179 145.62); --green-500: oklch(75.23% 0.209 144.64); --green-600: oklch(70.03% 0.194 144.71); --green: var(--green-400); --cyan-200: oklch(85% 0.07 200); --cyan-300: oklch(78% 0.10 200); --cyan-400: oklch(70% 0.13 200); --cyan-500: oklch(63% 0.14 200); --cyan-600: oklch(55% 0.13 200); --cyan: var(--cyan-400); --blue-200: oklch(80.17% 0.091 258.88); --blue-300: oklch(70.94% 0.136 258.06); --blue-400: oklch(62.39% 0.181 258.33); --blue-500: oklch(54.87% 0.222 260.33); --blue-600: oklch(51.15% 0.204 260.17); --blue: var(--blue-400); --purple-200: oklch(78.68% 0.091 305); --purple-300: oklch(68.5% 0.136 303.78); --purple-400: oklch(58.47% 0.181 302.06); --purple-500: oklch(49.39% 0.215 298.31); --purple-600: oklch(46.11% 0.198 298.4); --purple: var(--purple-400); --pink-200: oklch(92.14% 0.046 352.31); --pink-300: oklch(88.9% 0.066 354.39); --pink-400: oklch(85.43% 0.09 354.1); --pink-500: oklch(82.23% 0.112 355.33); --pink-600: oklch(76.37% 0.101 355.37); --pink: var(--pink-400); } /* ═══════════════════════════════════════════════════════════════════ HUMDRUM — warm neutrals, vivid blue accent (#0f80ea ≈ oklch 60% 0.21 246). All accent families derived in OKLCH around 400 = base. ═══════════════════════════════════════════════════════════════════ */ [data-theme="humdrum"] { --bg: #F5F3EE; --bg-card: #FFFFFF; --bg-elevated: #FFFFFF; --bg-hover: rgba(0, 0, 0, 0.035); --bg-active: rgba(0, 0, 0, 0.07); --border: #E2DFD7; --border-strong: #C3BFB3; --text: #2A2825; --text-muted: #6D6A63; --text-faint: #ADA99F; --text-accent: #2A2825; --text-on-accent:#FFFFFF; --selection: oklch(0.85 0.07 253); /* blue-200 tint */ --accent: #0F80EA; /* blue-400, kept as hex */ /* * Color levels — every family anchored at oklch(0.60 0.18 H). * Blue 400 = oklch(0.60 0.18 253) ≈ #0F80EA (actual conversion). * All other families share L=0.60 C=0.18 at 400, only hue changes. * * Step pattern (L, C multiplier): * 200: L 0.82, C × 0.45 (= 0.081) * 300: L 0.72, C × 0.75 (= 0.135) * 400: L 0.60, C × 1.00 (= 0.180) base * 500: L 0.53, C × 0.95 (= 0.171) * 600: L 0.45, C × 0.85 (= 0.153) */ /* Blue (primary) — base = #0F80EA */ --blue-200: oklch(0.82 0.081 253); --blue-300: oklch(0.72 0.135 253); --blue-400: oklch(0.60 0.180 253); --blue-500: oklch(0.53 0.171 253); --blue-600: oklch(0.45 0.153 253); --blue: var(--blue-400); --red-200: oklch(0.82 0.081 22); --red-300: oklch(0.72 0.135 22); --red-400: oklch(0.60 0.180 22); --red-500: oklch(0.53 0.171 22); --red-600: oklch(0.45 0.153 22); --red: var(--red-400); --orange-200: oklch(0.82 0.081 50); --orange-300: oklch(0.72 0.135 50); --orange-400: oklch(0.60 0.180 50); --orange-500: oklch(0.53 0.171 50); --orange-600: oklch(0.45 0.153 50); --orange: var(--orange-400); --yellow-200: oklch(0.82 0.081 85); --yellow-300: oklch(0.72 0.135 85); --yellow-400: oklch(0.60 0.180 85); --yellow-500: oklch(0.53 0.171 85); --yellow-600: oklch(0.45 0.153 85); --yellow: var(--yellow-400); --green-200: oklch(0.82 0.081 140); --green-300: oklch(0.72 0.135 140); --green-400: oklch(0.60 0.180 140); --green-500: oklch(0.53 0.171 140); --green-600: oklch(0.45 0.153 140); --green: var(--green-400); --cyan-200: oklch(0.82 0.081 205); --cyan-300: oklch(0.72 0.135 205); --cyan-400: oklch(0.60 0.180 205); --cyan-500: oklch(0.53 0.171 205); --cyan-600: oklch(0.45 0.153 205); --cyan: var(--cyan-400); --purple-200: oklch(0.82 0.081 295); --purple-300: oklch(0.72 0.135 295); --purple-400: oklch(0.60 0.180 295); --purple-500: oklch(0.53 0.171 295); --purple-600: oklch(0.45 0.153 295); --purple: var(--purple-400); --pink-200: oklch(0.82 0.081 350); --pink-300: oklch(0.72 0.135 350); --pink-400: oklch(0.60 0.180 350); --pink-500: oklch(0.53 0.171 350); --pink-600: oklch(0.45 0.153 350); --pink: var(--pink-400); } [data-theme="humdrum-dark"] { --bg: #1F1D1A; --bg-card: #282622; --bg-elevated: #32302C; --bg-hover: rgba(255, 255, 255, 0.04); --bg-active: rgba(255, 255, 255, 0.08); --border: #32302C; --border-strong: #4A4740; --text: #E8E5DD; --text-muted: #A8A49B; --text-faint: #6D6A63; --text-accent: #E8E5DD; --text-on-accent:#FFFFFF; --selection: oklch(0.35 0.13 253); /* dark blue tint */ --accent: #0F80EA; /* same as light, kept hex */ --blue-200: oklch(0.82 0.081 253); --blue-300: oklch(0.72 0.135 253); --blue-400: oklch(0.60 0.180 253); --blue-500: oklch(0.53 0.171 253); --blue-600: oklch(0.45 0.153 253); --blue: var(--blue-400); --red-200: oklch(0.82 0.081 22); --red-300: oklch(0.72 0.135 22); --red-400: oklch(0.60 0.180 22); --red-500: oklch(0.53 0.171 22); --red-600: oklch(0.45 0.153 22); --red: var(--red-400); --orange-200: oklch(0.82 0.081 50); --orange-300: oklch(0.72 0.135 50); --orange-400: oklch(0.60 0.180 50); --orange-500: oklch(0.53 0.171 50); --orange-600: oklch(0.45 0.153 50); --orange: var(--orange-400); --yellow-200: oklch(0.82 0.081 85); --yellow-300: oklch(0.72 0.135 85); --yellow-400: oklch(0.60 0.180 85); --yellow-500: oklch(0.53 0.171 85); --yellow-600: oklch(0.45 0.153 85); --yellow: var(--yellow-400); --green-200: oklch(0.82 0.081 140); --green-300: oklch(0.72 0.135 140); --green-400: oklch(0.60 0.180 140); --green-500: oklch(0.53 0.171 140); --green-600: oklch(0.45 0.153 140); --green: var(--green-400); --cyan-200: oklch(0.82 0.081 205); --cyan-300: oklch(0.72 0.135 205); --cyan-400: oklch(0.60 0.180 205); --cyan-500: oklch(0.53 0.171 205); --cyan-600: oklch(0.45 0.153 205); --cyan: var(--cyan-400); --purple-200: oklch(0.82 0.081 295); --purple-300: oklch(0.72 0.135 295); --purple-400: oklch(0.60 0.180 295); --purple-500: oklch(0.53 0.171 295); --purple-600: oklch(0.45 0.153 295); --purple: var(--purple-400); --pink-200: oklch(0.82 0.081 350); --pink-300: oklch(0.72 0.135 350); --pink-400: oklch(0.60 0.180 350); --pink-500: oklch(0.53 0.171 350); --pink-600: oklch(0.45 0.153 350); --pink: var(--pink-400); } /* ═══════════════════════════════════════════════════════════════════ E-INK — pure monochrome, no motion. All accents collapse to black. ═══════════════════════════════════════════════════════════════════ */ [data-theme="eink"] { --bg: #FFFFFF; --bg-card: #FFFFFF; --bg-elevated: #FFFFFF; --bg-hover: #000000; --bg-active: #000000; --border: #000000; --border-strong: #000000; --text: #000000; --text-muted: #000000; --text-faint: #000000; --text-accent: #000000; --text-on-accent:#FFFFFF; --selection: #000000; --accent: #000000; --red-200: #000; --red-300: #000; --red-400: #000; --red-500: #000; --red-600: #000; --red: #000; --orange-200: #000; --orange-300: #000; --orange-400: #000; --orange-500: #000; --orange-600: #000; --orange: #000; --yellow-200: #000; --yellow-300: #000; --yellow-400: #000; --yellow-500: #000; --yellow-600: #000; --yellow: #000; --green-200: #000; --green-300: #000; --green-400: #000; --green-500: #000; --green-600: #000; --green: #000; --cyan-200: #000; --cyan-300: #000; --cyan-400: #000; --cyan-500: #000; --cyan-600: #000; --cyan: #000; --blue-200: #000; --blue-300: #000; --blue-400: #000; --blue-500: #000; --blue-600: #000; --blue: #000; --purple-200: #000; --purple-300: #000; --purple-400: #000; --purple-500: #000; --purple-600: #000; --purple: #000; --pink-200: #000; --pink-300: #000; --pink-400: #000; --pink-500: #000; --pink-600: #000; --pink: #000; } [data-theme="eink"], [data-theme="eink"] * { transition: none !important; animation: none !important; box-shadow: none !important; font-weight: 600; } [data-theme="eink"] strong, [data-theme="eink"] b, [data-theme="eink"] h1, [data-theme="eink"] h2, [data-theme="eink"] h3 { font-weight: 800; } [data-theme="eink"] button, [data-theme="eink"] .card, [data-theme="eink"] .nav, [data-theme="eink"] .btn, [data-theme="eink"] .dialog { border: 2px solid #000 !important; border-radius: 0 !important; } [data-theme="eink"] .btn-primary { background: #000 !important; color: #fff !important; } [data-theme="eink"] .highlight { background: transparent !important; border-bottom: 4px solid #000 !important; border-radius: 0 !important; } /* ─── Base body wiring ─────────────────────────────────────────────── */ html, body { background: var(--bg); color: var(--text); font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-normal); } h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); } code, pre, kbd, samp { font-family: var(--font-mono); } ::selection { background: var(--selection); }