/* The complete light-only system. `static` keeps tokens read from plain CSS. */ @theme static { --color-*: initial; --color-transparent: transparent; --color-current: currentColor; --color-white: oklch(1 0 0); /* Raw semantic scales. */ --color-ruby-1: oklch(0.99364 0.00344 354.69); --color-ruby-2: oklch(0.98260 0.00865 8.54); --color-ruby-3: oklch(0.95384 0.02210 7.18); --color-ruby-4: oklch(0.92496 0.03933 8.14); --color-ruby-5: oklch(0.89604 0.05620 7.27); --color-ruby-6: oklch(0.85820 0.06638 8.00); --color-ruby-7: oklch(0.81067 0.07992 7.15); --color-ruby-8: oklch(0.74888 0.10209 6.50); --color-ruby-9: oklch(0.611 0.171 13.15); --color-ruby-10: oklch(0.55 0.182 13.52); --color-ruby-11: oklch(0.457 0.19852 13.9); --color-ruby-12: oklch(0.34105 0.10955 10.00); --color-orange-1: oklch(0.99231 0.00252 48.72); --color-orange-2: oklch(0.97962 0.01577 73.68); --color-orange-3: oklch(0.95832 0.03712 79.11); --color-orange-4: oklch(0.91996 0.06510 74.37); --color-orange-5: oklch(0.88789 0.08751 71.31); --color-orange-6: oklch(0.85372 0.10682 66.02); --color-orange-7: oklch(0.80586 0.11233 59.96); --color-orange-8: oklch(0.74500 0.13223 54.68); --color-orange-9: oklch(0.716 0.146 45.02); --color-orange-10: oklch(0.633 0.158 43.46); --color-orange-11: oklch(0.558 0.158 42.74); --color-orange-12: oklch(0.34993 0.06851 40.83); --color-lime-1: oklch(0.99246 0.00408 121.56); --color-lime-2: oklch(0.98166 0.00944 119.57); --color-lime-3: oklch(0.95878 0.04281 118.62); --color-lime-4: oklch(0.93191 0.06833 120.20); --color-lime-5: oklch(0.89733 0.08759 122.06); --color-lime-6: oklch(0.85315 0.09915 123.29); --color-lime-7: oklch(0.79482 0.11160 125.43); --color-lime-8: oklch(0.72504 0.13507 128.23); --color-lime-9: oklch(0.684 0.12 126.09); --color-lime-10: oklch(0.603 0.132 126.75); --color-lime-11: oklch(0.474 0.14 128.6); --color-lime-12: oklch(0.35370 0.05728 120.98); /* Warm olive neutrals. The lightest steps are deliberately close, not aliases. */ --color-gray-50: oklch(0.99051 0.00263 95); /* #fcfcfa */ --color-gray-100: oklch(0.97857 0.00264 95); /* #f8f8f6 */ --color-gray-150: oklch(0.96623 0.0039 95); /* #f4f4f1 */ --color-gray-200: oklch(0.94216 0.00393 95); /* #ecece9 */ --color-gray-300: oklch(0.89108 0.00552 95); /* #dcdbd7 */ --color-gray-400: oklch(0.74029 0.00856 95); /* #acaba5 */ --color-gray-450: oklch(0.66810 0.01050 95); /* #96958e */ --color-gray-500: oklch(0.56514 0.0123 95); /* #78766e */ --color-gray-600: oklch(0.48124 0.01278 95); /* #605e56 */ --color-gray-700: oklch(0.39036 0.01026 95); /* #47453f */ --color-gray-750: oklch(0.32036 0.00877 95); /* #34332e */ --color-gray-800: oklch(0.25993 0.00745 95); /* #252420 */ --color-gray-900: oklch(0.15908 0.00637 95); /* #0e0d0a */ /* Surfaces: white is reserved for the document and things lifted above it. */ --color-page: oklch(1 0 0); --color-ground: var(--color-gray-150); --color-hover: var(--color-gray-100); --color-inset: var(--color-gray-100); --color-selected: var(--color-gray-200); --color-text-primary: var(--color-gray-900); --color-text-secondary: var(--color-gray-700); --color-text-tertiary: var(--color-gray-600); --color-text-quaternary: var(--color-gray-500); --color-icon: var(--color-gray-500); --color-chat-body: oklch(0.38064 0.01903 136.21); --color-chat-pane: color-mix(in srgb, var(--color-ground) 30%, var(--color-page)); /* Petrol is the only accent: action, focus, presence and links all agree. */ --color-brand: oklch(0.50006 0.08514 210.06); /* #06707e */ --color-brand-hover: oklch(0.42914 0.07315 210.634); /* #045a66 */ --color-brand-active: oklch(0.37546 0.06382 210.435); /* #034a54 */ --color-brand-wash: oklch(0.925 0.02 210); --color-brand-ink: oklch(0.43882 0.07476 210.193); /* #045d69 */ --focus-ring-color: var(--color-brand); --focus-ring-width: 2px; --focus-ring-offset: 2px; --color-neutral-surface: var(--color-gray-100); --color-neutral-graphic: var(--color-gray-450); --color-neutral-icon: var(--color-gray-500); --color-neutral-text: var(--color-gray-700); --color-success-surface: var(--color-lime-3); --color-success-graphic: var(--color-lime-8); --color-success-icon: var(--color-lime-11); --color-success-text: var(--color-lime-12); --color-warning-surface: var(--color-orange-3); --color-warning-graphic: var(--color-orange-8); --color-warning-icon: var(--color-orange-11); --color-warning-text: var(--color-orange-12); --color-danger-surface: var(--color-ruby-3); --color-danger-graphic: var(--color-ruby-9); --color-danger-icon: var(--color-ruby-11); --color-danger-text: var(--color-ruby-12); --color-success: oklch(0.51958 0.10966 145.072); /* #3b793f */ --color-success-wash: oklch(0.93 0.026 145); --color-success-ink: oklch(0.44098 0.11068 144.754); /* #236228 */ --color-warning: oklch(0.59898 0.12586 74.986); /* #ab7302 */ --color-warning-wash: oklch(0.95 0.032 75); --color-warning-ink: oklch(0.4409 0.0921 74.93); /* #704a02 */ --color-destructive: oklch(0.60513 0.17178 24.175); /* #d54d4c */ --color-destructive-hover: oklch(0.56972 0.16045 24.136); /* #c44746 */ --color-destructive-active: oklch(0.53376 0.1489 24.091); /* #b34140 */ --color-destructive-wash: color-mix( in srgb, var(--color-destructive) 20%, var(--color-page) ); --color-destructive-ink: oklch(0.4941 0.19046 25.161); /* #b51421 */ /* Passive structure and controls are the only two edge weights. */ --color-edge: oklch(0 0 0 / 7%); --color-control-edge: oklch(0 0 0 / 20%); --color-control-boundary: var(--color-gray-500); --edge-width: 1px; --button-edge-width: 1px; /* * Utopia-style fluid modular scale: 360–1440px viewport, 15–16px base, * and 1.12–1.14 ratio. Each clamp interpolates base * ratio^step. * The smaller steps serve compact controls (-2), UI text (-1), and prose (0). */ --text-*: initial; --text-xs: clamp(0.747369rem, 0.740003rem + 0.032738vw, 0.769468rem); --text-xs--line-height: 1.35; --text-sm: clamp(0.837054rem, 0.823674rem + 0.059466vw, 0.877193rem); --text-sm--line-height: 1.5; --text-base: clamp(0.9375rem, 0.916667rem + 0.092593vw, 1rem); --text-base--line-height: 1.5; --text-lg: clamp(1.176rem, 1.1348rem + 0.183111vw, 1.2996rem); --text-lg--line-height: 1.4; --text-xl: clamp(1.475174rem, 1.403912rem + 0.31672vw, 1.68896rem); --text-xl--line-height: 1.25; --text-2xl: clamp(2.072514rem, 1.929262rem + 0.636674vw, 2.502269rem); --text-2xl--line-height: 1.15; /* Tailwind's multiplier keeps 4px steps and admits 2, 6, 10 and 22px. */ --spacing: 0.25rem; /* * Tailwind's own values, declared here so the scale has one owner: a change * lands in one place, and a misspelt rung is caught rather than waved through. */ --radius-*: initial; --radius-sm: 0.25rem; /* 4px — buttons, grips, toolbar cells */ --radius-md: 0.375rem; /* 6px — cards, inputs, callouts, code blocks */ --radius-lg: 0.5rem; /* 8px — popovers and panels */ --radius-xl: 0.625rem; /* 10px — the document page */ --radius-full: 9999px; /* saturated pill rounding */ /* * Warm-tinted depth, copied from the settled Figma shadow table. * * The tint is declared *after* the reset, and the order is load-bearing: * `--shadow-*: initial` clears the whole namespace, and `--shadow-color` is * in it. Declared above the reset it is wiped before it is ever emitted, so * every `oklch(var(--shadow-color) / n%)` below becomes an invalid * declaration and all four shadows compute to `none`. Nothing errors and * nothing is undefined at the source — the file still reads correctly, and * `check-tokens.ts` now refuses this rather than reading the declaration * that is textually there. */ --shadow-*: initial; --shadow-color: 0.15908 0.00637 95; --shadow-resting: 0 0 1px oklch(var(--shadow-color) / 3%), 0 1px 1px oklch(var(--shadow-color) / 3%), 0 3px 2px oklch(var(--shadow-color) / 2%); --shadow-resting-strong: 0 0 1px oklch(var(--shadow-color) / 4%), 0 1px 2px oklch(var(--shadow-color) / 5%), 0 4px 3px oklch(var(--shadow-color) / 3%), 0 7px 4px oklch(var(--shadow-color) / 1%); --shadow-raised: 0 1px 2px oklch(var(--shadow-color) / 6%), 0 3px 3px oklch(var(--shadow-color) / 5%), 0 8px 5px oklch(var(--shadow-color) / 3%), 0 14px 5px oklch(var(--shadow-color) / 1%); --shadow-overlay: 0 2px 3px oklch(var(--shadow-color) / 10%), 0 7px 6px oklch(var(--shadow-color) / 9%), 0 15px 8px oklch(var(--shadow-color) / 5%), 0 26px 10px oklch(var(--shadow-color) / 1%); /* * Leaves immediately and settles slowly, so a change reads as a response to * whatever caused it. Durations are named for the job: `fast` is feedback * under the pointer, `linger` is the agent's change marks fading unwatched. */ --ease-*: initial; --ease-out: cubic-bezier(0.2, 0, 0, 1); --duration-fast: 120ms; --duration-base: 200ms; --duration-linger: 600ms; /* Surface motion uses semantic names so 120ms control feedback stays fast. */ --motion-smooth-out: cubic-bezier(0.22, 1, 0.36, 1); --motion-move: cubic-bezier(0.65, 0, 0.35, 1); --dropdown-open-dur: 250ms; --dropdown-close-dur: 150ms; --dropdown-pre-scale: 0.97; --dropdown-closing-scale: 0.99; --dropdown-ease: var(--motion-smooth-out); --modal-open-dur: 250ms; --modal-close-dur: 150ms; --modal-scale: 0.96; --modal-scale-close: 0.96; --modal-ease: var(--motion-smooth-out); --sidebar-open-dur: 250ms; --sidebar-close-dur: 180ms; --drawer-open-dur: 250ms; --drawer-close-dur: 180ms; --drawer-distance: 8px; --panel-open-dur: 280ms; --panel-close-dur: 220ms; --panel-distance: 12px; --panel-blur: 2px; --page-slide-dur: 250ms; --page-slide-distance: 8px; --page-blur: 3px; --icon-swap-dur: 250ms; --icon-swap-blur: 2px; --badge-pop-dur: 180ms; --badge-close-dur: 180ms; --acc-expand: 250ms; --acc-collapse: 250ms; --toast-open: 280ms; --toast-close: 200ms; /* Retunes all fifteen `transition-*` utilities, none of which names a curve. */ --default-transition-duration: var(--duration-fast); --default-transition-timing-function: var(--ease-out); /* Inter is loaded in `main.tsx`; the editor reads this token rather than repeating the stack. */ --font-sans: "Inter Variable", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif; --font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace; }