/* ───────────────────────────────────────────────────────────────────────── * design-systems/x-ai/tokens.css * * Structured token bindings for "x-ai" — the dark-first, monospace-driven * brutalist minimalism of Elon Musk's AI lab. A design system that * communicates through absence: pure white on warm near-black, GeistMono * as the display voice, zero shadows, zero gradients, zero accent color. * Restraint as sophistication. * * Brand identity in three sentences: * 1. Dark-first canvas at #1f2228 (warm near-black with a subtle blue * undertone, NEVER pure #000000) carries pure-white text as "the * voice", with hierarchy expressed through opacity (100 / 70 / 50 / 30) * rather than hue. There is no gray middle ground. * 2. GeistMono runs at display sizes (up to a hero-only 320px at weight * 300) and as the uppercase, letter-spaced button face. universalSans * handles body and section headings. The monospace-as-display choice * is the brand: terminal aesthetic as luxury. * 3. Zero box-shadows, zero gradients, near-zero radii (0px default, * 4px occasional softening). Depth comes from opacity-based borders * and surface tints, not from simulated light. The single chromatic * exception is the keyboard focus ring (Tailwind's default blue). * * Brand-specific schema decisions (each bends a schema convention to * match xAI's voice rather than the cross-brand default): * * 1. `--bg` is `#1f2228`, NOT `#000000`. DESIGN.md §2 names this hue * explicitly: "This specific hue prevents the harsh eye strain of * `#000000` while maintaining deep darkness." Pure black is * forbidden by the brand. * * 2. `--accent` is `#ffffff`, not a chromatic color. xAI has no * accent palette — white IS the chromatic move. Primary CTAs render * with `var(--accent)` as background and `var(--accent-on)` as * foreground, producing the signature white-on-dark button. The * "≤2 accent uses per screen" lint still holds; the primary CTA and * the focus indicator are the only places white reverses against * the canvas. * * 3. `--font-display` is a GeistMono stack. Monospace AS the display * face is the defining aesthetic decision (DESIGN.md §3) — it * positions xAI not as a consumer product but as infrastructure, * as something built by people who live in terminals. `--font-mono` * aliases the same stack because GeistMono IS the monospace face * used for code, kbd, and tabular metrics. * * 4. The four-level foreground ramp is opacity-based (rgba 1.0 / 0.7 * / 0.5 / 0.3), NOT a grayscale hex ramp. DESIGN.md §2 documents * the system literally as "white at α". Binding `--fg-2`, `--muted`, * and `--meta` as `rgba(255,255,255,α)` preserves the "white over * canvas" voice and keeps the tiers chromatically locked to the * single foreground color. * * 5. `--border` is `rgba(255, 255, 255, 0.1)` — DESIGN.md §2's default * "Border Default" alpha, NOT a solid hex. `--border-soft` drops to * 0.05 for inner-row separators. The 0.2 "Border Strong" tier from * DESIGN.md lives inline per-component (hover/active state edges). * * 6. Radii are aggressively small: 0 / 0 / 4 / 9999. DESIGN.md §5: * "The near-zero radius philosophy is core to the brand's brutalist * identity." Buttons, inputs, and cards all default to 0px; * `--radius-lg` softens to 4px for the rare secondary container * (DESIGN.md's "Subtle (4px) occasional"). `--radius-pill` stays at * 9999px because the schema slot requires a pill value, even though * xAI rarely renders one. * * 7. `--elev-raised` is literally `none`. DESIGN.md §6: "xAI rejects * the conventional shadow-based elevation system entirely. There * are no box-shadows anywhere on the site." Depth is communicated * through three other mechanisms documented in the same section: * opacity-based borders that brighten on interaction, subtle * background-opacity shifts (0.03 → 0.08), and the massive * typographic scale contrast. `--elev-ring` is kept as a hairline * border-as-shadow so components that target the elevation token * still get a visible edge. * * 8. `--focus-ring` is the ONLY chromatic exception to the otherwise * strictly monochromatic palette. DESIGN.md §2 names Tailwind's * default `--tw-ring-color` (`rgb(59, 130, 246) / 0.5`) as the * keyboard focus indicator. We reproduce it as a 3px halo * (Tailwind's `ring-2` shape) — the blue is intentional and * non-negotiable for a11y, even though the rest of the system is * achromatic. * * 9. The type scale tops out at 64px (`--text-4xl`), NOT the 320px * hero display DESIGN.md §3 names. 320px is a hero-only treatment, * not a token tier — components.html overrides `font-size` inline * for that one cinematic moment. Reserving `--text-4xl` at 64px * keeps the slot useful as the H1-equivalent ceiling for cards, * sections, and modals across the system. (See vercel/tokens.css * §6 for the same reasoning: tokens encode reusable tiers, not * one-off hero crops.) * * 10. `--tracking-display` stays `normal`. GeistMono at display scale * does NOT compress letter-spacing — the monospace grid is part of * the aesthetic and tightening would collapse it. The uppercase * button tracking (`1.4px`, DESIGN.md §4) is an interaction-specific * value that lives inline on `.btn` since it applies only to * command-line-styled labels, not display headlines. * * Source contracts: * - Standard token names: design-systems/_schema/tokens.schema.ts * - A2 fallback parity: design-systems/_schema/defaults.css * - Lint enforcement: apps/daemon/src/lint-artifact.ts * * Keep this file additive: never invent token names not also documented * in DESIGN.md or the shared schema. The GeistMono and universalSans * faces are referenced by name only — artifacts that render acceptably * fall back to the OS monospace and sans-serif stacks listed inside the * font-family declarations. * ─────────────────────────────────────────────────────────────── */ :root { /* ─── Surface ───────────────────────────────────────────────────── * #1f2228 is the singular canvas — warm near-black with a subtle * blue undertone. `--surface` is the barely-visible 0.03 white tint * that cards sit on; `--surface-warm` rises to 0.05 for hover and * elevated rows. DESIGN.md §6's elevation ramp uses both values * verbatim as "Surface (Level 1)" and "Surface Hover". */ --bg: #1f2228; /* warm near-black canvas — NEVER #000 */ --surface: rgba(255, 255, 255, 0.03); /* subtle card surface */ --surface-warm: rgba(255, 255, 255, 0.05); /* hover / elevated tier */ /* ─── Foreground ────────────────────────────────────────────────── * Four-level opacity ramp per DESIGN.md §2. Pure white is "the * voice"; subsequent tiers express hierarchy by dimming rather * than by hue. Binding as rgba (not hex) keeps the ramp locked * chromatically to the single foreground color. */ --fg: #ffffff; /* primary — headings, links, body */ --fg-2: rgba(255, 255, 255, 0.7); /* secondary — descriptions */ --muted: rgba(255, 255, 255, 0.5); /* tertiary — captions, timestamps */ --meta: rgba(255, 255, 255, 0.3); /* quaternary — disabled, annotations */ /* ─── Border ────────────────────────────────────────────────────── * Opacity-based borders — barely visible, never absent. 0.1 is the * default card / divider edge; 0.05 is the inner-row separator * that should not visually compete. The 0.2 "strong" tier from * DESIGN.md §2 lives inline per-component (hover/active states). */ --border: rgba(255, 255, 255, 0.1); /* default card / divider */ --border-soft: rgba(255, 255, 255, 0.05); /* inner row separator */ /* ─── Accent ────────────────────────────────────────────────────── * White IS the accent. There is no chromatic color in xAI's * monochromatic palette — primary CTAs are white-on-dark. * `--accent-hover` dims to 0.9 alpha per DESIGN.md §4 (primary * button hover); `--accent-active` drops a further step. The * convention is REVERSED from most systems: hover dims, it does * not brighten. */ --accent: #ffffff; /* the voice as bg */ --accent-on: #1f2228; /* canvas as fg on accent */ --accent-hover: rgba(255, 255, 255, 0.9); /* slight dimming on hover (DESIGN.md §4) */ --accent-active: rgba(255, 255, 255, 0.8); /* deeper dim on press */ /* ─── Semantic ──────────────────────────────────────────────────── * DESIGN.md §7 actively discourages colored status indicators * ("Don't use colored status indicators unless absolutely * necessary — keep everything in the white/dark spectrum"). We * inherit schema defaults so the slots remain useful for the rare * cases where status truly must render chromatically — but * components should prefer monochrome cues (opacity, weight). */ --success: #16a34a; --warn: #eab308; --danger: #dc2626; /* ─── Typography — fonts ────────────────────────────────────────── * GeistMono is the brand's defining typographic decision: a * monospace face used at display sizes. universalSans handles * body and section headings. `--font-mono` aliases the display * stack because GeistMono IS the monospace face — there is no * separate code typeface. */ --font-display: "GeistMono", ui-monospace, "SF Mono", "Roboto Mono", Menlo, Monaco, "Liberation Mono", "DejaVu Sans Mono", "Courier New", monospace; --font-body: "universalSans", "universalSans Fallback", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; --font-mono: "GeistMono", ui-monospace, "SF Mono", "Roboto Mono", Menlo, Monaco, "Liberation Mono", "DejaVu Sans Mono", "Courier New", monospace; /* Type scale — DESIGN.md §3 hierarchy table. * The 320px display hero is intentionally NOT a token tier; * components.html overrides `font-size` inline for that one * cinematic treatment. `--text-4xl` instead caps at 64px, the * realistic ceiling for marketing H1s across cards/sections. * `--text-2xl` (30px) matches DESIGN.md's "Section Heading" tier. */ --text-xs: 12px; /* small / meta — timestamps, footnotes */ --text-sm: 14px; /* button label / caption */ --text-base: 16px; /* body — universalSans 1.5 */ --text-lg: 20px; /* body large / introductions */ --text-xl: 24px; /* card title */ --text-2xl: 30px; /* section heading — DESIGN.md §3 */ --text-3xl: 40px; /* H1 */ --text-4xl: 64px; /* display ceiling (320px hero is inline-only) */ /* Leading + tracking. * `--leading-body: 1.5` is universalSans body (DESIGN.md §3). * `--leading-tight: 1.2` matches the 30px section heading. * `--tracking-display: normal` because GeistMono at scale does * NOT compress letter-spacing — the monospace grid is the * aesthetic and tightening would collapse it. */ --leading-body: 1.5; --leading-tight: 1.2; --tracking-display: normal; /* ─── Spacing ───────────────────────────────────────────────────── * DESIGN.md §5 documents a deliberately sparse scale concentrated * at the small end: 4 / 8 / 24 / 48. We bind the full schema slot * range — components reach for 1/2/6/12 most often; the * intermediate tiers are preserved for edge cases where a * narrower step is structurally required. */ --space-1: 4px; --space-2: 8px; --space-3: 12px; --space-4: 16px; --space-5: 20px; --space-6: 24px; --space-8: 32px; --space-12: 48px; /* Section rhythm — DESIGN.md §5: "generous section padding 48px– * 96px". 96 desktop / 64 tablet / 48 phone preserves the * cinematic emptiness that is itself a design statement; the * absence of decoration means whitespace is the primary structural * tool. */ --section-y-desktop: 96px; --section-y-tablet: 64px; --section-y-phone: 48px; /* ─── Radius ────────────────────────────────────────────────────── * Brutalist precision. DESIGN.md §5: "Sharp (0px) primary * treatment for buttons, cards, inputs — the default. Subtle (4px) * occasional softening on secondary containers." `--radius-pill` * stays at 9999px because the schema slot requires a pill value, * even though xAI rarely renders one. */ --radius-sm: 0px; /* buttons, inputs — sharp */ --radius-md: 0px; /* cards — sharp */ --radius-lg: 4px; /* occasional secondary softening */ --radius-pill: 9999px; /* schema-required slot */ /* ─── Elevation ─────────────────────────────────────────────────── * Shadow-free system per DESIGN.md §6: "xAI rejects the * conventional shadow-based elevation system entirely. There are * no box-shadows anywhere on the site." `--elev-raised` is * literally `none`; depth comes from opacity-based borders and * background tints. `--elev-ring` preserves the hairline edge for * components that read the elevation token. */ --elev-flat: none; --elev-ring: 0 0 0 1px var(--border); --elev-raised: none; /* ─── Focus ─────────────────────────────────────────────────────── * The single chromatic exception. Tailwind's default * `--tw-ring-color` (DESIGN.md §2 "Ring Blue") at 50% opacity, as * a 3px halo matching the `ring-2` shape xAI uses for keyboard * accessibility focus states. Non-negotiable for a11y. */ --focus-ring: 0 0 0 3px rgba(59, 130, 246, 0.5); /* ─── Motion ────────────────────────────────────────────────────── * Schema defaults. xAI does not choreograph — transitions are * short, purposeful, utilitarian. No long-form entrances. */ --motion-fast: 150ms; --motion-base: 200ms; --ease-standard: cubic-bezier(0.2, 0, 0, 1); /* ─── Layout ────────────────────────────────────────────────────── * DESIGN.md §5: "Max content width: approximately 1200px." Gutters * narrow on mobile so the dense-but-deliberate vertical rhythm * keeps reading even when the dark canvas reaches the edge. */ --container-max: 1200px; --container-gutter-desktop: 24px; --container-gutter-tablet: 16px; --container-gutter-phone: 12px; }