@vegastack/design-tokens 0.4.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base.css +101 -60
- package/dist/theme.css +147 -440
- package/dist/tokens.cjs +86 -526
- package/dist/tokens.d.cts +84 -524
- package/dist/tokens.d.ts +84 -524
- package/dist/tokens.js +86 -526
- package/dist/tokens.json +86 -526
- package/dist/utilities.css +87 -13
- package/package.json +1 -1
package/dist/theme.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
@custom-variant dark (&:
|
|
1
|
+
@custom-variant dark (&:is(.dark *));
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Do not edit directly, this file was auto-generated.
|
|
@@ -6,60 +6,49 @@
|
|
|
6
6
|
|
|
7
7
|
:root {
|
|
8
8
|
color-scheme: light;
|
|
9
|
-
--background: oklch(0
|
|
10
|
-
--foreground: oklch(0.145 0
|
|
11
|
-
--card: oklch(0
|
|
12
|
-
--card-foreground: oklch(0.145 0
|
|
13
|
-
--popover: oklch(0
|
|
14
|
-
--popover-foreground: oklch(0.145 0
|
|
15
|
-
--
|
|
16
|
-
--
|
|
17
|
-
--
|
|
18
|
-
--
|
|
19
|
-
--
|
|
20
|
-
--
|
|
21
|
-
--
|
|
22
|
-
--
|
|
23
|
-
--
|
|
24
|
-
--
|
|
25
|
-
--
|
|
26
|
-
--
|
|
27
|
-
--
|
|
28
|
-
--
|
|
29
|
-
--
|
|
30
|
-
--
|
|
31
|
-
--
|
|
32
|
-
--
|
|
33
|
-
--
|
|
34
|
-
--
|
|
35
|
-
--
|
|
36
|
-
--
|
|
37
|
-
--
|
|
38
|
-
--warning: oklch(0.52 0.145 52);
|
|
39
|
-
--warning-foreground: oklch(0.985 0.003 75);
|
|
40
|
-
--warning-subtle: oklch(0.96 0.019 42);
|
|
41
|
-
--warning-text: oklch(0.505 0.139 42); /** Page-readable amber ink (was amber.650, L 0.52); -0.015 L for the soft pressed rung — see destructive-text. */
|
|
42
|
-
--info: oklch(0.531 0.182 256);
|
|
43
|
-
--info-foreground: oklch(0.985 0.003 75);
|
|
44
|
-
--info-subtle: oklch(0.961 0.018 253);
|
|
45
|
-
--info-text: oklch(0.5 0.171 256); /** Link / informational blue ink (was blue.650, L 0.52); -0.02 L for the soft pressed rung — see destructive-text. */
|
|
46
|
-
--overlay: oklch(0.13 0.002 75 / 0.28); /** Modal scrim — an alpha-composite literal (a translucent wash has no primitive step; alpha is intrinsic to the role). Theme-split: the dark scrim is deeper. */
|
|
9
|
+
--background: oklch(1 0 0);
|
|
10
|
+
--foreground: oklch(0.145 0 0);
|
|
11
|
+
--card: oklch(1 0 0);
|
|
12
|
+
--card-foreground: oklch(0.145 0 0);
|
|
13
|
+
--popover: oklch(1 0 0);
|
|
14
|
+
--popover-foreground: oklch(0.145 0 0);
|
|
15
|
+
--primary: oklch(0.205 0 0);
|
|
16
|
+
--primary-foreground: oklch(0.985 0 0);
|
|
17
|
+
--secondary: oklch(0.97 0 0);
|
|
18
|
+
--secondary-foreground: oklch(0.205 0 0);
|
|
19
|
+
--muted: oklch(0.97 0 0);
|
|
20
|
+
--muted-foreground: oklch(0.539 0 0);
|
|
21
|
+
--accent: oklch(0.97 0 0);
|
|
22
|
+
--accent-foreground: oklch(0.205 0 0);
|
|
23
|
+
--border: oklch(0.922 0 0);
|
|
24
|
+
--input: oklch(0.922 0 0);
|
|
25
|
+
--ring: oklch(0.205 0 0); /** FOC-2 (ours): the focus ring is the near-black/near-white INK, not shadcn's mid-grey (0.708 light / 0.556 dark). FOC-1 paints it as one global 2px `:focus-visible` outline, so it is the whole focus affordance and has to carry real contrast. */
|
|
26
|
+
--destructive: oklch(0.577 0.245 27.325); /** shadcn base-nova's value, verbatim. */
|
|
27
|
+
--destructive-foreground: oklch(1 0 0);
|
|
28
|
+
--destructive-text: oklch(0.446 0.182 27.325); /** COL-12 (ours), the page-readable half of the family. A status FILL is tuned to carry its own `-foreground` on top of it; used AS TEXT on the page or on the family's own 10-20% tint it lands between 3.98 and 4.35:1, which is a live WCAG 1.4.3 failure (measured by the rendered axe lane, 2026-09-18, on Alert, Badge, Toast and the soft Button). This is the ink those surfaces read through, AA-gated by contrast-check on background, card, popover and on the /10, /20 and /30 composites over each. Upstream has no tinted status surface at all, so this token is an addition to shadcn rather than a deviation from it. */
|
|
29
|
+
--success: oklch(0.53 0.15 150); /** COL-12 (ours): written in shadcn's destructive shape — one fill, one on-fill foreground. AA-gated as page text and as a fill under its foreground, in both themes. */
|
|
30
|
+
--success-foreground: oklch(1 0 0);
|
|
31
|
+
--success-text: oklch(0.44 0.121 150);
|
|
32
|
+
--warning: oklch(0.55 0.12 70); /** COL-12 (ours): written in shadcn's destructive shape — one fill, one on-fill foreground. AA-gated as page text and as a fill under its foreground, in both themes. */
|
|
33
|
+
--warning-foreground: oklch(1 0 0);
|
|
34
|
+
--warning-text: oklch(0.462 0.1 70);
|
|
35
|
+
--info: oklch(0.55 0.19 256); /** COL-12 (ours): written in shadcn's destructive shape — one fill, one on-fill foreground. AA-gated as page text and as a fill under its foreground, in both themes. */
|
|
36
|
+
--info-foreground: oklch(1 0 0);
|
|
37
|
+
--info-text: oklch(0.456 0.156 256);
|
|
47
38
|
--media-scrim: oklch(0.13 0.002 75 / 0.6); /** THEME-INVARIANT media chrome scrim (B4-01): the gradient/backdrop behind controls laid over video or imagery. Always a warm-black alpha, never a theme token, so the chrome reads dark-scrim + light-ink in both themes (`primary` flips with the theme and inverted the chrome in dark). TEXT IS PERMITTED on this scrim: media-foreground clears 5.2:1 on it over a white worst-case backdrop, and tooling/contrast-check.mjs gates the pair at the AA TEXT floor (4.5:1), not the 3:1 non-text floor — so a retune that thins this scrim under AA fails the build rather than silently demoting its labels. */
|
|
48
39
|
--media-scrim-strong: oklch(0.13 0.002 75 / 0.8); /** Theme-invariant strong scrim for opaque media pills (volume popover, time badge) — 11:1 for media-foreground over a white worst case. Use it for any block of media text that needs headroom beyond the soft scrim's ~5.2:1, and for text over unusually bright or busy frames. */
|
|
49
|
-
--media-foreground: oklch(0.985 0
|
|
50
|
-
--
|
|
51
|
-
--
|
|
52
|
-
--chart-
|
|
53
|
-
--chart-
|
|
54
|
-
--chart-
|
|
55
|
-
--chart-
|
|
56
|
-
--chart-
|
|
57
|
-
--chart-
|
|
58
|
-
--chart-
|
|
59
|
-
--
|
|
60
|
-
--
|
|
61
|
-
--brand: oklch(0.6 0.17 148); /** The phosphor-green brand accent, LIGHT half (theme-split per CX-9): MARKER roles (live/AI-state dot, sparkline endpoint, eyebrow highlight, terminal prompt glyph) plus the `cta` Button's faint wash and its accent outline — the one sanctioned button, D17/D18. 3.5:1 on card/background — meaningful glyphs pass WCAG 1.4.11, and it is NOT a text ink: brand LABELS take `brand-text`. Never a headline colour, a full-strength surface, or a decorative wash beyond one radial. */
|
|
62
|
-
--brand-text: oklch(0.46 0.17 148); /** The PAGE-READABLE brand ink, LIGHT half — the same role every chromatic family ships as `<family>-text`. `brand` itself is a 3.5:1 marker and fails WCAG 1.4.3 as a label (measured 3.41:1 for the `cta` Button's mono label over its own faint wash, 2026-09-09), so any brand-coloured TEXT reads through this token instead. Gated at 4.5:1 by contrast-check over background/card/popover/surface-1–3 and over the brand wash at alpha-surface-faint/hover/pressed. */
|
|
40
|
+
--media-foreground: oklch(0.985 0 0); /** Theme-invariant media chrome ink: the warm off-white used for every icon, label and track drawn over media-scrim or media-scrim-strong. Labels are allowed on EITHER scrim — both are gated at the AA text floor (4.5:1) against this ink over the white worst case. Not overridden in dark on purpose. */
|
|
41
|
+
--chart-1: oklch(0.546 0.245 262.88); /** Categorical chart hue (MK 2026-09-18: our 8-hue palette is kept — shadcn's `neutral` base ships a greyscale chart ramp, which cannot carry multi-series data). Light halves retuned for the pure-white page and the 0.97 `muted` ground; every hue clears the WCAG 1.4.11 3:1 floor on background, card and muted in both themes. */
|
|
42
|
+
--chart-2: oklch(0.581 0.118 184.7); /** Categorical chart hue (MK 2026-09-18: our 8-hue palette is kept — shadcn's `neutral` base ships a greyscale chart ramp, which cannot carry multi-series data). Light halves retuned for the pure-white page and the 0.97 `muted` ground; every hue clears the WCAG 1.4.11 3:1 floor on background, card and muted in both themes. */
|
|
43
|
+
--chart-3: oklch(0.398 0.07 227.39); /** Categorical chart hue (MK 2026-09-18: our 8-hue palette is kept — shadcn's `neutral` base ships a greyscale chart ramp, which cannot carry multi-series data). Light halves retuned for the pure-white page and the 0.97 `muted` ground; every hue clears the WCAG 1.4.11 3:1 floor on background, card and muted in both themes. */
|
|
44
|
+
--chart-4: oklch(0.623 0.222 41.12); /** Categorical chart hue (MK 2026-09-18: our 8-hue palette is kept — shadcn's `neutral` base ships a greyscale chart ramp, which cannot carry multi-series data). Light halves retuned for the pure-white page and the 0.97 `muted` ground; every hue clears the WCAG 1.4.11 3:1 floor on background, card and muted in both themes. */
|
|
45
|
+
--chart-5: oklch(0.632 0.246 16.44); /** Categorical chart hue (MK 2026-09-18: our 8-hue palette is kept — shadcn's `neutral` base ships a greyscale chart ramp, which cannot carry multi-series data). Light halves retuned for the pure-white page and the 0.97 `muted` ground; every hue clears the WCAG 1.4.11 3:1 floor on background, card and muted in both themes. */
|
|
46
|
+
--chart-6: oklch(0.505 0.213 27.52); /** Categorical chart hue (MK 2026-09-18: our 8-hue palette is kept — shadcn's `neutral` base ships a greyscale chart ramp, which cannot carry multi-series data). Light halves retuned for the pure-white page and the 0.97 `muted` ground; every hue clears the WCAG 1.4.11 3:1 floor on background, card and muted in both themes. */
|
|
47
|
+
--chart-7: oklch(0.598 0.127 104.2); /** Categorical chart hue (MK 2026-09-18: our 8-hue palette is kept — shadcn's `neutral` base ships a greyscale chart ramp, which cannot carry multi-series data). Light halves retuned for the pure-white page and the 0.97 `muted` ground; every hue clears the WCAG 1.4.11 3:1 floor on background, card and muted in both themes. */
|
|
48
|
+
--chart-8: oklch(0.531 0.182 256); /** Categorical chart hue (MK 2026-09-18: our 8-hue palette is kept — shadcn's `neutral` base ships a greyscale chart ramp, which cannot carry multi-series data). Light halves retuned for the pure-white page and the 0.97 `muted` ground; every hue clears the WCAG 1.4.11 3:1 floor on background, card and muted in both themes. */
|
|
49
|
+
--chart-single: oklch(0.145 0 0); /** Single-series chart ink (D29): one series is drawn in foreground ink; the categorical chart-1…8 hues start at two series. */
|
|
50
|
+
--brand: oklch(0.6 0.17 148); /** The phosphor-green brand accent, LIGHT half (theme-split): MARKER roles only — a live/AI-state dot, a sparkline endpoint, an eyebrow highlight, a terminal prompt glyph. 3.5:1 on card/background, so a meaningful glyph passes WCAG 1.4.11, and it is NOT a text ink: brand LABELS take `brand-text`. Never a headline colour, never a functional state colour, never a full-strength surface. */
|
|
51
|
+
--brand-text: oklch(0.46 0.17 148); /** The PAGE-READABLE brand ink, LIGHT half — the same role every chromatic family ships as `<family>-text`. `brand` itself is a 3.5:1 MARKER value (a live dot, a sparkline endpoint, a terminal prompt glyph) and fails WCAG 1.4.3 as a label, so any brand-coloured TEXT reads through this token instead. Gated at 4.5:1 by contrast-check over background, card, popover, muted, accent, secondary and sidebar. */
|
|
63
52
|
--tag-blue: oklch(0.6 0.16 256); /** Tag palette (Attio-teardown Wave 1): 10 chromatic hues x base/subtle/text mirroring the family/family-subtle/family-text shape. base = dots/accents (>=3:1 non-text vs background), subtle = chip fill, text = chip text (>=4.5:1 on subtle AND page). Neutral tags use muted/muted-foreground. AA-validated fail-closed in contrast-check.mjs. */
|
|
64
53
|
--tag-blue-subtle: oklch(0.955 0.02 256);
|
|
65
54
|
--tag-blue-text: oklch(0.51 0.15 256);
|
|
@@ -90,70 +79,19 @@
|
|
|
90
79
|
--tag-purple: oklch(0.6 0.16 295);
|
|
91
80
|
--tag-purple-subtle: oklch(0.955 0.02 295);
|
|
92
81
|
--tag-purple-text: oklch(0.51 0.15 295);
|
|
93
|
-
--sidebar: oklch(0.
|
|
94
|
-
--sidebar-foreground: oklch(0.145 0
|
|
95
|
-
--sidebar-primary: oklch(0.
|
|
96
|
-
--sidebar-primary-foreground: oklch(0.985 0
|
|
97
|
-
--sidebar-accent: oklch(0.
|
|
98
|
-
--sidebar-accent-foreground: oklch(0.
|
|
99
|
-
--sidebar-border: oklch(0.
|
|
100
|
-
--sidebar-ring: oklch(0.
|
|
101
|
-
--radius: 0.
|
|
102
|
-
--radius-xs: 0.125rem; /** Micro radius — caret/arrow triangles and other sub-control geometry (was a silent Tailwind fallback, register P1-10). */
|
|
103
|
-
--radius-sharp: 2px; /** The rationed marketing 'sharp' gesture (audit 17/D18): CTAs, chips, figure frames on marketing surfaces. 2px, not 0 — sharp at a glance, kin to the product scale. */
|
|
104
|
-
--radius-sm: 0.375rem;
|
|
105
|
-
--radius-md: 0.5rem;
|
|
106
|
-
--radius-lg: 0.75rem;
|
|
107
|
-
--size-xs: 1.5rem; /** 24px — the compact control tier (Button xs, icon-only affordances like the password eye). */
|
|
108
|
-
--size-sm: 1.75rem;
|
|
109
|
-
--size-md: 2rem;
|
|
110
|
-
--size-lg: 2.5rem;
|
|
111
|
-
--icon-compact: 0.75rem; /** 12px icon — inside xs controls only (below design.md's named scale; exists for the kept Button xs tier). */
|
|
112
|
-
--icon-inline: 0.875rem; /** 14px icon — inline with body text and sm controls (design.md §Iconography 'inline'). */
|
|
113
|
-
--icon-default: 1rem; /** 16px icon — the default control icon (design.md 'default'). */
|
|
114
|
-
--icon-action: 1.25rem; /** 20px icon — standalone action icons (design.md 'action'). */
|
|
115
|
-
--icon-feature: 1.5rem; /** 24px icon — feature/empty-state glyphs (design.md 'feature'). */
|
|
116
|
-
--sidebar-width: 15rem; /** Expanded sidebar rail width (was a JS constant invisible to design-lint, register P2-13). */
|
|
117
|
-
--sidebar-width-icon: 3rem; /** Collapsed icon-only rail width. */
|
|
118
|
-
--sidebar-width-mobile: 18rem; /** Width of the sidebar when it renders as an off-canvas sheet below the md breakpoint (was an inline `18rem` fallback, B6-08). */
|
|
119
|
-
--layout-header-height: 3.5rem; /** 56px app-shell header band (was a raw `h-14`, B6-08). Sticky/fixed content below the header offsets by this. */
|
|
120
|
-
--layout-overlay-max-height: calc(100dvh - 16rem); /** The tallest a scrolling overlay body (Command list, Board column, ShortcutOverlay) may grow: the dynamic viewport minus a 16rem chrome allowance. DTCG 2025.10 has no calc expression type, so this dimension is authored as the CSS string it resolves to and passed through verbatim (the same precedent as the `easing` linear() token). */
|
|
121
|
-
--panel-width-sm: 14rem; /** 224px floating panel (compact popover, small menu, single-value date trigger). */
|
|
122
|
-
--panel-width-md: 18rem; /** 288px floating panel — the default Popover, EmojiPicker, checklist card, range date trigger. */
|
|
123
|
-
--panel-width-lg: 20rem; /** 320px floating panel (rich HoverCard previews). */
|
|
124
|
-
--shadow-overlay: 0 4px 14px -4px oklch(0.13 0.002 75 / 0.1), 0 2px 4px -2px oklch(0.13 0.002 75 / 0.06);
|
|
125
|
-
--effect-blur-glass: 8px; /** Backdrop blur for chrome that floats over content (the Attachment upload veil). The Button `glass` variant it was introduced for was deleted 2026-09-07 (audit D16). */
|
|
126
|
-
--z-raised: 10; /** Local raise WITHIN a component's own stacking context (focused OTP slot / segmented item, floating label, bubble reactions, select scroll arrows). Never for portaled surfaces. */
|
|
127
|
-
--z-overlay: 50; /** The portal band: every portaled floating surface (dialog, sheet, popover, menu, select, tooltip, hover-card). Nesting resolves by DOM order — Base UI appends portals to <body>, so a Select inside a Dialog mounts later and stacks above within the same band. Toasts are the ONE surface above it, on their own `z-toast` band. */
|
|
128
|
-
--z-toast: 60; /** The toast band, one step above `z-overlay`. A toast is the only surface that must outrank a modal REGARDLESS of mount order — the viewport mounts with the app provider, so DOM order would otherwise put every later-opened dialog on top of it. Within the band the stack counts DOWN from this value by `--toast-index`, so the frontmost toast is the highest. Nothing else may claim this band. */
|
|
129
|
-
--opacity-dim: 50%; /** Element opacity for disabled controls and dimmed affordances (outside-month days, decorative chevrons). */
|
|
130
|
-
--opacity-hint-soft: 60%; /** Element opacity for hover-revealed hints (e.g. sort affordance on row hover). */
|
|
131
|
-
--opacity-hint: 70%; /** Element opacity for resting secondary controls that reach 100% on hover (e.g. alert close). */
|
|
132
|
-
--opacity-track: 25%; /** Element opacity of the circular progress track ring. */
|
|
133
|
-
--alpha-hover: 7%; /** The alpha twin of surface-2: `bg-<ink>/(--alpha-hover)` composites the hover rung onto ANY backdrop (a kbd inside a hovered row, a chip on a well, a control over media). foreground at 7% over the page measures L 0.943 light / 0.267 dark over card — within 0.003 of the opaque rung. Theme-invariant. */
|
|
134
|
-
--alpha-pressed: 10%; /** The alpha twin of surface-3 (pressed/selected): foreground at 10% measures L 0.921 light / 0.292 dark over card. Theme-invariant. */
|
|
135
|
-
--alpha-border: 8%; /** The hairline alpha (D14): `border` is DERIVED as foreground at this alpha, so one hairline reads on page, card, well and dark band. 8% light (L 0.936, Geist gray-400 territory) / 14% dark (L 0.325 over card). */
|
|
136
|
-
--alpha-tint-border: 70%; /** Border tint for focus (ring) and error (destructive) borders — design.md's ring/70 pattern. */
|
|
137
|
-
--alpha-outline-border: 50%; /** Resting border of the outline button family (border-<family>). */
|
|
138
|
-
--alpha-border-subtle: 20%; /** Alert variant border tint (border-<family>). */
|
|
139
|
-
--alpha-border-soft: 30%; /** The softer of the two border-tint steps. Introduced for the sonner toast surface; since the Base UI Toast migration (O2) the toast tint uses `alpha-border-subtle` like Alert, so this step currently has NO in-repo caller. Kept because it is published token surface — retiring it is a token-batch decision, not a component one. */
|
|
140
|
-
--alpha-surface-faint: 5%; /** Resting wash of the outline button family (bg-<family>). */
|
|
141
|
-
--alpha-ink-tint: 10%; /** Neutral pressed/hover ink tint (bg-foreground) — toggle pressed, chip remove hover. */
|
|
142
|
-
--alpha-ink-tint-strong: 15%; /** Hovered pressed-state ink tint (bg-foreground). */
|
|
143
|
-
--alpha-input: 30%; /** Dark-theme input fill tint (bg-input) — see the dark-tint scoping note. */
|
|
144
|
-
--alpha-wash-faint: 40%; /** Faint neutral wash (bg-muted) — rich-text toolbar. */
|
|
145
|
-
--alpha-wash: 50%; /** Neutral wash (bg-muted) — card/table footers, ghost dark hover. */
|
|
146
|
-
--alpha-wash-strong: 60%; /** Stronger neutral wash (bg-muted) — line-tab hover. */
|
|
147
|
-
--alpha-backdrop-soft: 60%; /** Translucent surface backdrop (bg-background) — pill tab list. */
|
|
148
|
-
--alpha-glass: 90%; /** Glass button surface (bg-background + backdrop-blur). */
|
|
149
|
-
--alpha-glass-hover: 95%; /** Glass button surface on hover. */
|
|
150
|
-
--alpha-link-hover: 88%; /** Hovered link text dim, applied to a `<family>-text` ink in rendered rich text and on the `link` Button. 88%, not 80%: at 80% the light composites measured 4.03–4.11:1 for success/info/warning (2026-09-09) — a hover state that drops the link below WCAG 1.4.3 AA. contrast-check gates the composite, not just the solid ink. */
|
|
151
|
-
--alpha-outline-soft: 50%; /** Soft neutral outline/ring (base outline default, date-picker today ring). */
|
|
82
|
+
--sidebar: oklch(0.985 0 0);
|
|
83
|
+
--sidebar-foreground: oklch(0.145 0 0);
|
|
84
|
+
--sidebar-primary: oklch(0.205 0 0);
|
|
85
|
+
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
86
|
+
--sidebar-accent: oklch(0.97 0 0);
|
|
87
|
+
--sidebar-accent-foreground: oklch(0.205 0 0);
|
|
88
|
+
--sidebar-border: oklch(0.922 0 0);
|
|
89
|
+
--sidebar-ring: oklch(0.205 0 0);
|
|
90
|
+
--radius: 0.625rem; /** shadcn base-nova's radius. `--radius-sm/md/lg/xl/2xl/3xl/4xl` are DERIVED from it in the @theme bridge exactly as upstream derives them (0.6/0.8/1/1.4/1.8/2.2/2.6x), so `rounded-xl` on a card is upstream's 14px. The pre-reset 12px cap and the `rounded-xl` ban are gone (BRD-6/BRD-7 = shadcn). */
|
|
152
91
|
--font-family-sans: Geist, sans-serif;
|
|
153
92
|
--font-family-mono: 'Geist Mono', monospace;
|
|
154
|
-
--font-family-serif: Newsreader, serif; /** Serif
|
|
155
|
-
--font-family-display: Geist, sans-serif; /** Display tier face — same family as sans today, split as a token so
|
|
156
|
-
--font-family-pixel: 'Geist Pixel Square', monospace; /** THE single sanctioned Geist Pixel flourish cut (D17: one deliberate hero use per surface, no more). */
|
|
93
|
+
--font-family-serif: Newsreader, serif; /** Serif accent: display emphasis words and pull-quotes only, never running text. Newsreader (opsz axis) until Geist Serif ships. */
|
|
94
|
+
--font-family-display: Geist, sans-serif; /** Display tier face — the same family as sans today, split as a token so a consumer can retune large type without moving body copy. */
|
|
157
95
|
--duration-fast: 150ms;
|
|
158
96
|
--duration-base: 200ms;
|
|
159
97
|
--duration-slow: 300ms;
|
|
@@ -162,24 +100,6 @@
|
|
|
162
100
|
--motion-ease-emphasized: cubic-bezier(0.3, 0, 0, 1);
|
|
163
101
|
--motion-ease-exit: cubic-bezier(0.4, 0, 1, 1);
|
|
164
102
|
--motion-ease-spring: linear(0, 0.5 60%, 1.05 80%, 0.98 90%, 1); /** CSS linear() spring with a very small overshoot — the success-bounce/appear curve for state-feedback micro-interactions (Phase M). Subtle by design: dense dev-tool aesthetic, not playful. */
|
|
165
|
-
--motion-blur: 2px; /** Motion-blur amount for blur-fade entrances (Phase M text/element reveals). */
|
|
166
|
-
--border: oklch(0.145 0.003 75 / 0.08); /** DERIVED: foreground at 8% (alpha-border) — the one alpha hairline (D14). */
|
|
167
|
-
--destructive-hover: oklch(0.455 0.213 27.52); /** DERIVED: destructive fill at L-0.05 (hover step). */
|
|
168
|
-
--destructive-active: oklch(0.415 0.213 27.52); /** DERIVED: destructive fill at L-0.09 (active step). */
|
|
169
|
-
--destructive-subtle-hover: oklch(0.91 0.036 20.4); /** DERIVED: destructive fill @7.000000000000001% composited over destructive-subtle (soft-hover surface, AA-gated against destructive-text). */
|
|
170
|
-
--destructive-subtle-active: oklch(0.883 0.046 19.3); /** DERIVED: destructive fill @12% composited over destructive-subtle (soft-pressed surface, AA-gated against destructive-text). */
|
|
171
|
-
--success-hover: oklch(0.45 0.16 150); /** DERIVED: success fill at L-0.05 (hover step). */
|
|
172
|
-
--success-active: oklch(0.41 0.16 150); /** DERIVED: success fill at L-0.09 (active step). */
|
|
173
|
-
--success-subtle-hover: oklch(0.919 0.059 151.1); /** DERIVED: success fill @7.000000000000001% composited over success-subtle (soft-hover surface, AA-gated against success-text). */
|
|
174
|
-
--success-subtle-active: oklch(0.896 0.065 151.7); /** DERIVED: success fill @12% composited over success-subtle (soft-pressed surface, AA-gated against success-text). */
|
|
175
|
-
--warning-hover: oklch(0.47 0.145 52); /** DERIVED: warning fill at L-0.05 (hover step). */
|
|
176
|
-
--warning-active: oklch(0.43 0.145 52); /** DERIVED: warning fill at L-0.09 (active step). */
|
|
177
|
-
--warning-subtle-hover: oklch(0.929 0.027 48.8); /** DERIVED: warning fill @7.000000000000001% composited over warning-subtle (soft-hover surface, AA-gated against warning-text). */
|
|
178
|
-
--warning-subtle-active: oklch(0.906 0.034 51.5); /** DERIVED: warning fill @12% composited over warning-subtle (soft-pressed surface, AA-gated against warning-text). */
|
|
179
|
-
--info-hover: oklch(0.481 0.182 256); /** DERIVED: info fill at L-0.05 (hover step). */
|
|
180
|
-
--info-active: oklch(0.441 0.182 256); /** DERIVED: info fill at L-0.09 (active step). */
|
|
181
|
-
--info-subtle-hover: oklch(0.929 0.03 251.1); /** DERIVED: info fill @7.000000000000001% composited over info-subtle (soft-hover surface, AA-gated against info-text). */
|
|
182
|
-
--info-subtle-active: oklch(0.906 0.038 250.5); /** DERIVED: info fill @12% composited over info-subtle (soft-pressed surface, AA-gated against info-text). */
|
|
183
103
|
}
|
|
184
104
|
|
|
185
105
|
/**
|
|
@@ -188,38 +108,35 @@
|
|
|
188
108
|
|
|
189
109
|
.dark {
|
|
190
110
|
color-scheme: dark;
|
|
191
|
-
--background: oklch(0.
|
|
192
|
-
--foreground: oklch(0.
|
|
193
|
-
--card: oklch(0.205 0
|
|
194
|
-
--card-foreground: oklch(0.
|
|
195
|
-
--popover: oklch(0.205 0
|
|
196
|
-
--popover-foreground: oklch(0.
|
|
197
|
-
--primary: oklch(0.922 0
|
|
198
|
-
--primary-foreground: oklch(0.
|
|
199
|
-
--
|
|
200
|
-
--
|
|
201
|
-
--
|
|
202
|
-
--
|
|
203
|
-
--
|
|
204
|
-
--
|
|
205
|
-
--
|
|
206
|
-
--
|
|
207
|
-
--
|
|
208
|
-
--
|
|
209
|
-
--
|
|
210
|
-
--
|
|
211
|
-
--
|
|
212
|
-
--
|
|
213
|
-
--
|
|
214
|
-
--
|
|
215
|
-
--
|
|
216
|
-
--warning-
|
|
217
|
-
--
|
|
218
|
-
--info-
|
|
219
|
-
--info-text: oklch(0.76 0.
|
|
220
|
-
--overlay: oklch(0 0 0 / 0.55);
|
|
221
|
-
--input: oklch(0.922 0.003 75 / 0.14);
|
|
222
|
-
--ring: oklch(0.922 0.003 75);
|
|
111
|
+
--background: oklch(0.145 0 0);
|
|
112
|
+
--foreground: oklch(0.985 0 0);
|
|
113
|
+
--card: oklch(0.205 0 0);
|
|
114
|
+
--card-foreground: oklch(0.985 0 0);
|
|
115
|
+
--popover: oklch(0.205 0 0);
|
|
116
|
+
--popover-foreground: oklch(0.985 0 0);
|
|
117
|
+
--primary: oklch(0.922 0 0);
|
|
118
|
+
--primary-foreground: oklch(0.205 0 0);
|
|
119
|
+
--secondary: oklch(0.269 0 0);
|
|
120
|
+
--secondary-foreground: oklch(0.985 0 0);
|
|
121
|
+
--muted: oklch(0.269 0 0);
|
|
122
|
+
--muted-foreground: oklch(0.708 0 0);
|
|
123
|
+
--accent: oklch(0.269 0 0);
|
|
124
|
+
--accent-foreground: oklch(0.985 0 0);
|
|
125
|
+
--border: oklch(1 0 0 / 0.1);
|
|
126
|
+
--input: oklch(1 0 0 / 0.15);
|
|
127
|
+
--ring: oklch(0.922 0 0); /** FOC-2 (ours) — the dark half of the ink ring. */
|
|
128
|
+
--destructive: oklch(0.704 0.191 22.216);
|
|
129
|
+
--destructive-foreground: oklch(0.145 0 0);
|
|
130
|
+
--destructive-text: oklch(0.756 0.146 22.216); /** COL-12 (ours), the page-readable half of the family. A status FILL is tuned to carry its own `-foreground` on top of it; used AS TEXT on the page or on the family's own 10-20% tint it lands between 3.98 and 4.35:1, which is a live WCAG 1.4.3 failure (measured by the rendered axe lane, 2026-09-18, on Alert, Badge, Toast and the soft Button). This is the ink those surfaces read through, AA-gated by contrast-check on background, card, popover and on the /10, /20 and /30 composites over each. Upstream has no tinted status surface at all, so this token is an addition to shadcn rather than a deviation from it. */
|
|
131
|
+
--success: oklch(0.72 0.17 150);
|
|
132
|
+
--success-foreground: oklch(0.145 0 0);
|
|
133
|
+
--success-text: oklch(0.748 0.17 150);
|
|
134
|
+
--warning: oklch(0.75 0.15 70);
|
|
135
|
+
--warning-foreground: oklch(0.145 0 0);
|
|
136
|
+
--warning-text: oklch(0.776 0.15 70);
|
|
137
|
+
--info: oklch(0.72 0.15 256);
|
|
138
|
+
--info-foreground: oklch(0.145 0 0);
|
|
139
|
+
--info-text: oklch(0.76 0.124 256);
|
|
223
140
|
--chart-1: oklch(0.623 0.214 259.81);
|
|
224
141
|
--chart-2: oklch(0.696 0.17 162.48);
|
|
225
142
|
--chart-3: oklch(0.769 0.188 70.08);
|
|
@@ -228,107 +145,9 @@
|
|
|
228
145
|
--chart-6: oklch(0.69 0.21 25);
|
|
229
146
|
--chart-7: oklch(0.72 0.15 103.9);
|
|
230
147
|
--chart-8: oklch(0.72 0.13 256);
|
|
231
|
-
--chart-single: oklch(0.
|
|
232
|
-
--tag-blue: oklch(0.72 0.14 256);
|
|
233
|
-
--tag-blue-subtle: oklch(0.275 0.05 256);
|
|
234
|
-
--tag-blue-text: oklch(0.75 0.13 256);
|
|
235
|
-
--tag-cyan: oklch(0.72 0.13 226);
|
|
236
|
-
--tag-cyan-subtle: oklch(0.275 0.05 226);
|
|
237
|
-
--tag-cyan-text: oklch(0.75 0.13 226);
|
|
238
|
-
--tag-green: oklch(0.72 0.15 150);
|
|
239
|
-
--tag-green-subtle: oklch(0.275 0.05 150);
|
|
240
|
-
--tag-green-text: oklch(0.75 0.13 150);
|
|
241
|
-
--tag-lime: oklch(0.72 0.15 117);
|
|
242
|
-
--tag-lime-subtle: oklch(0.275 0.05 117);
|
|
243
|
-
--tag-lime-text: oklch(0.75 0.13 117);
|
|
244
|
-
--tag-yellow: oklch(0.72 0.14 86);
|
|
245
|
-
--tag-yellow-subtle: oklch(0.275 0.05 86);
|
|
246
|
-
--tag-yellow-text: oklch(0.75 0.13 86);
|
|
247
|
-
--tag-orange: oklch(0.72 0.15 52);
|
|
248
|
-
--tag-orange-subtle: oklch(0.275 0.05 52);
|
|
249
|
-
--tag-orange-text: oklch(0.75 0.13 52);
|
|
250
|
-
--tag-red: oklch(0.72 0.15 25);
|
|
251
|
-
--tag-red-subtle: oklch(0.275 0.05 25);
|
|
252
|
-
--tag-red-text: oklch(0.75 0.13 25);
|
|
253
|
-
--tag-pink: oklch(0.72 0.15 356);
|
|
254
|
-
--tag-pink-subtle: oklch(0.275 0.05 356);
|
|
255
|
-
--tag-pink-text: oklch(0.75 0.13 356);
|
|
256
|
-
--tag-magenta: oklch(0.72 0.15 323);
|
|
257
|
-
--tag-magenta-subtle: oklch(0.275 0.05 323);
|
|
258
|
-
--tag-magenta-text: oklch(0.75 0.13 323);
|
|
259
|
-
--tag-purple: oklch(0.72 0.15 295);
|
|
260
|
-
--tag-purple-subtle: oklch(0.275 0.05 295);
|
|
261
|
-
--tag-purple-text: oklch(0.75 0.13 295);
|
|
262
|
-
--sidebar: oklch(0.205 0.003 75);
|
|
263
|
-
--sidebar-foreground: oklch(0.922 0.003 75);
|
|
264
|
-
--sidebar-primary: oklch(0.922 0.003 75);
|
|
265
|
-
--sidebar-primary-foreground: oklch(0.145 0.003 75);
|
|
266
|
-
--sidebar-accent: oklch(0.269 0.003 75);
|
|
267
|
-
--sidebar-accent-foreground: oklch(0.922 0.003 75);
|
|
268
|
-
--sidebar-border: oklch(0.922 0.003 75 / 0.14);
|
|
269
|
-
--sidebar-ring: oklch(0.922 0.003 75);
|
|
148
|
+
--chart-single: oklch(0.985 0 0); /** Repeated here on purpose: an alias is resolved per run, so a light-only alias would leak the LIGHT ink into `.dark` through the cascade (the contrast gate caught exactly that). */
|
|
270
149
|
--brand: oklch(0.86 0.21 148); /** The phosphor-green brand accent, DARK half — MK's pick (13.3:1 on the dark canvas). Marker roles plus the `cta` Button's wash/outline. */
|
|
271
|
-
--brand-text: oklch(0.86 0.21 148); /** The page-readable brand ink, DARK half. On the dark
|
|
272
|
-
--alpha-border: 14%; /** Dark half of the hairline alpha (D14): near-white ink needs more alpha than near-black to read as a line — foreground at 14% over card measures L 0.325, over the page 0.302. */
|
|
273
|
-
--shadow-overlay: 0 8px 28px -6px oklch(0 0 0 / 0.48), 0 2px 8px -2px oklch(0 0 0 / 0.4); /** DARK overlay shadow, strengthened (Wave 1 — Attio-calibrated): the old single 24px layer was near-invisible on the dark canvas; this two-layer ramp restores the floating cue while staying below Attio's 88px maximal ramp. */
|
|
274
|
-
--border: oklch(0.922 0.003 75 / 0.14); /** DERIVED: foreground at 14% (alpha-border) — the one alpha hairline (D14). */
|
|
275
|
-
--destructive-subtle-hover: oklch(0.34 0.123 26.3); /** DERIVED: destructive fill @30% composited over destructive-subtle (soft-hover surface, AA-gated against destructive-text). */
|
|
276
|
-
--destructive-subtle-active: oklch(0.364 0.137 26.9); /** DERIVED: destructive fill @40% composited over destructive-subtle (soft-pressed surface, AA-gated against destructive-text). */
|
|
277
|
-
--success-subtle-hover: oklch(0.348 0.092 148.9); /** DERIVED: success fill @30% composited over success-subtle (soft-hover surface, AA-gated against success-text). */
|
|
278
|
-
--success-subtle-active: oklch(0.371 0.101 148.5); /** DERIVED: success fill @40% composited over success-subtle (soft-pressed surface, AA-gated against success-text). */
|
|
279
|
-
--warning-subtle-hover: oklch(0.356 0.093 46.6); /** DERIVED: warning fill @30% composited over warning-subtle (soft-hover surface, AA-gated against warning-text). */
|
|
280
|
-
--warning-subtle-active: oklch(0.381 0.1 47.3); /** DERIVED: warning fill @40% composited over warning-subtle (soft-pressed surface, AA-gated against warning-text). */
|
|
281
|
-
--info-subtle-hover: oklch(0.354 0.101 254.3); /** DERIVED: info fill @30% composited over info-subtle (soft-hover surface, AA-gated against info-text). */
|
|
282
|
-
--info-subtle-active: oklch(0.38 0.114 254.5); /** DERIVED: info fill @40% composited over info-subtle (soft-pressed surface, AA-gated against info-text). */
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
/**
|
|
286
|
-
* Do not edit directly, this file was auto-generated.
|
|
287
|
-
*/
|
|
288
|
-
|
|
289
|
-
.vs-marketing {
|
|
290
|
-
color-scheme: dark;
|
|
291
|
-
--background: oklch(0.175 0.003 75);
|
|
292
|
-
--foreground: oklch(0.922 0.003 75);
|
|
293
|
-
--card: oklch(0.205 0.003 75);
|
|
294
|
-
--card-foreground: oklch(0.922 0.003 75);
|
|
295
|
-
--popover: oklch(0.205 0.003 75);
|
|
296
|
-
--popover-foreground: oklch(0.922 0.003 75);
|
|
297
|
-
--primary: oklch(0.922 0.003 75);
|
|
298
|
-
--primary-foreground: oklch(0.145 0.003 75);
|
|
299
|
-
--primary-hover: oklch(0.97 0.003 75);
|
|
300
|
-
--primary-active: oklch(0.994 0.002 75);
|
|
301
|
-
--surface-1: oklch(0.236 0.003 75); /** Dark ladder: card 0.205 -> surface-1 0.236 -> surface-2 0.269 -> surface-3 0.29 (lighter = higher, ~0.03 L per rung, the Radix/Linear dark step). */
|
|
302
|
-
--surface-2: oklch(0.269 0.003 75);
|
|
303
|
-
--surface-3: oklch(0.29 0.003 75);
|
|
304
|
-
--secondary: oklch(0.236 0.003 75);
|
|
305
|
-
--secondary-foreground: oklch(0.922 0.003 75);
|
|
306
|
-
--muted: oklch(0.236 0.003 75);
|
|
307
|
-
--muted-foreground: oklch(0.66 0.003 75);
|
|
308
|
-
--muted-foreground-faint: oklch(0.559 0.003 75);
|
|
309
|
-
--accent: oklch(0.269 0.003 75);
|
|
310
|
-
--accent-foreground: oklch(0.922 0.003 75);
|
|
311
|
-
--destructive-subtle: oklch(0.275 0.07 25);
|
|
312
|
-
--destructive-text: oklch(0.74 0.16 25); /** Dark red ink (was red.400, L 0.72); +0.02 L so the soft pressed rung (fill @40% over subtle) clears 4.5:1 — see the light destructive-text note. */
|
|
313
|
-
--destructive-border: oklch(0.72 0.16 25); /** Dark-ground invalid-state border ink. red.400 at --alpha-tint-border measures 4.00:1 on background and 3.86:1 on card, clearing the 3:1 WCAG 1.4.11 floor the shared destructive fill misses (1.92:1). */
|
|
314
|
-
--success-subtle: oklch(0.276 0.061 150);
|
|
315
|
-
--success-text: oklch(0.74 0.17 150); /** Dark green ink (was green.500, L 0.72); +0.02 L for the soft pressed rung. */
|
|
316
|
-
--warning-subtle: oklch(0.28 0.069 42);
|
|
317
|
-
--warning-text: oklch(0.769 0.188 70.08);
|
|
318
|
-
--info-subtle: oklch(0.275 0.059 255);
|
|
319
|
-
--info-text: oklch(0.76 0.13 256); /** Dark link / informational blue ink (was blue.400, L 0.72); +0.04 L for the soft pressed rung — blue had the least headroom (4.50:1 at hover). */
|
|
320
|
-
--overlay: oklch(0 0 0 / 0.55);
|
|
321
|
-
--input: oklch(0.922 0.003 75 / 0.14);
|
|
322
|
-
--ring: oklch(0.922 0.003 75);
|
|
323
|
-
--chart-1: oklch(0.623 0.214 259.81);
|
|
324
|
-
--chart-2: oklch(0.696 0.17 162.48);
|
|
325
|
-
--chart-3: oklch(0.769 0.188 70.08);
|
|
326
|
-
--chart-4: oklch(0.75 0.183 55.93);
|
|
327
|
-
--chart-5: oklch(0.645 0.246 16.44);
|
|
328
|
-
--chart-6: oklch(0.69 0.21 25);
|
|
329
|
-
--chart-7: oklch(0.72 0.15 103.9);
|
|
330
|
-
--chart-8: oklch(0.72 0.13 256);
|
|
331
|
-
--chart-single: oklch(0.922 0.003 75); /** Repeated here on purpose: an alias is resolved per run, so a light-only alias would leak the LIGHT ink into `.dark` through the cascade (the contrast gate caught exactly that). */
|
|
150
|
+
--brand-text: oklch(0.86 0.21 148); /** The page-readable brand ink, DARK half. On the dark ground the marker value already measures 12.2:1 as a label, so brand-text and brand carry the SAME value here — the split exists because the light half cannot. */
|
|
332
151
|
--tag-blue: oklch(0.72 0.14 256);
|
|
333
152
|
--tag-blue-subtle: oklch(0.275 0.05 256);
|
|
334
153
|
--tag-blue-text: oklch(0.75 0.13 256);
|
|
@@ -359,73 +178,14 @@
|
|
|
359
178
|
--tag-purple: oklch(0.72 0.15 295);
|
|
360
179
|
--tag-purple-subtle: oklch(0.275 0.05 295);
|
|
361
180
|
--tag-purple-text: oklch(0.75 0.13 295);
|
|
362
|
-
--sidebar: oklch(0.205 0
|
|
363
|
-
--sidebar-foreground: oklch(0.
|
|
364
|
-
--sidebar-primary: oklch(0.
|
|
365
|
-
--sidebar-primary-foreground: oklch(0.
|
|
366
|
-
--sidebar-accent: oklch(0.269 0
|
|
367
|
-
--sidebar-accent-foreground: oklch(0.
|
|
368
|
-
--sidebar-border: oklch(0
|
|
369
|
-
--sidebar-ring: oklch(0.922 0
|
|
370
|
-
--brand: oklch(0.86 0.21 148); /** The phosphor-green brand accent, DARK half — MK's pick (13.3:1 on the dark canvas). Marker roles plus the `cta` Button's wash/outline. */
|
|
371
|
-
--brand-text: oklch(0.86 0.21 148); /** The page-readable brand ink, DARK half. On the dark and marketing grounds the marker value already measures 12.2:1 as a label, so brand-text and brand carry the SAME value here — the split exists because the light half cannot. */
|
|
372
|
-
--alpha-border: 14%; /** Dark half of the hairline alpha (D14): near-white ink needs more alpha than near-black to read as a line — foreground at 14% over card measures L 0.325, over the page 0.302. */
|
|
373
|
-
--shadow-overlay: 0 8px 28px -6px oklch(0 0 0 / 0.48), 0 2px 8px -2px oklch(0 0 0 / 0.4); /** DARK overlay shadow, strengthened (Wave 1 — Attio-calibrated): the old single 24px layer was near-invisible on the dark canvas; this two-layer ramp restores the floating cue while staying below Attio's 88px maximal ramp. */
|
|
374
|
-
--border: oklch(0.922 0.003 75 / 0.14); /** DERIVED: foreground at 14% (alpha-border) — the one alpha hairline (D14). */
|
|
375
|
-
--destructive-subtle-hover: oklch(0.34 0.123 26.3); /** DERIVED: destructive fill @30% composited over destructive-subtle (soft-hover surface, AA-gated against destructive-text). */
|
|
376
|
-
--destructive-subtle-active: oklch(0.364 0.137 26.9); /** DERIVED: destructive fill @40% composited over destructive-subtle (soft-pressed surface, AA-gated against destructive-text). */
|
|
377
|
-
--success-subtle-hover: oklch(0.348 0.092 148.9); /** DERIVED: success fill @30% composited over success-subtle (soft-hover surface, AA-gated against success-text). */
|
|
378
|
-
--success-subtle-active: oklch(0.371 0.101 148.5); /** DERIVED: success fill @40% composited over success-subtle (soft-pressed surface, AA-gated against success-text). */
|
|
379
|
-
--warning-subtle-hover: oklch(0.356 0.093 46.6); /** DERIVED: warning fill @30% composited over warning-subtle (soft-hover surface, AA-gated against warning-text). */
|
|
380
|
-
--warning-subtle-active: oklch(0.381 0.1 47.3); /** DERIVED: warning fill @40% composited over warning-subtle (soft-pressed surface, AA-gated against warning-text). */
|
|
381
|
-
--info-subtle-hover: oklch(0.354 0.101 254.3); /** DERIVED: info fill @30% composited over info-subtle (soft-hover surface, AA-gated against info-text). */
|
|
382
|
-
--info-subtle-active: oklch(0.38 0.114 254.5); /** DERIVED: info fill @40% composited over info-subtle (soft-pressed surface, AA-gated against info-text). */
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
/* Two-layer type scale (T1): both ladders + the active binding (product by default). */
|
|
386
|
-
:root {
|
|
387
|
-
--type-product-xs: 0.6875rem;
|
|
388
|
-
--type-product-xs--line-height: calc(16 / 11);
|
|
389
|
-
--type-product-sm: 0.75rem;
|
|
390
|
-
--type-product-sm--line-height: calc(16 / 12);
|
|
391
|
-
--type-product-base: 0.875rem;
|
|
392
|
-
--type-product-base--line-height: calc(21 / 14);
|
|
393
|
-
--type-product-lg: 1rem;
|
|
394
|
-
--type-product-lg--line-height: calc(24 / 16);
|
|
395
|
-
--type-product-xl: 1.125rem;
|
|
396
|
-
--type-product-xl--line-height: calc(26 / 18);
|
|
397
|
-
--type-product-2xl: 1.25rem;
|
|
398
|
-
--type-product-2xl--line-height: calc(28 / 20);
|
|
399
|
-
--type-product-3xl: 1.5rem;
|
|
400
|
-
--type-product-3xl--line-height: calc(32 / 24);
|
|
401
|
-
--type-doc-xs: 0.75rem;
|
|
402
|
-
--type-doc-xs--line-height: calc(1 / 0.75);
|
|
403
|
-
--type-doc-sm: 0.875rem;
|
|
404
|
-
--type-doc-sm--line-height: calc(1.25 / 0.875);
|
|
405
|
-
--type-doc-base: 1rem;
|
|
406
|
-
--type-doc-base--line-height: calc(1.5 / 1);
|
|
407
|
-
--type-doc-lg: 1.125rem;
|
|
408
|
-
--type-doc-lg--line-height: calc(1.75 / 1.125);
|
|
409
|
-
--type-doc-xl: 1.25rem;
|
|
410
|
-
--type-doc-xl--line-height: calc(1.75 / 1.25);
|
|
411
|
-
--type-doc-2xl: 1.5rem;
|
|
412
|
-
--type-doc-2xl--line-height: calc(2 / 1.5);
|
|
413
|
-
--type-doc-3xl: 1.875rem;
|
|
414
|
-
--type-doc-3xl--line-height: calc(2.25 / 1.875);
|
|
415
|
-
--type-xs: var(--type-product-xs);
|
|
416
|
-
--type-xs--line-height: var(--type-product-xs--line-height);
|
|
417
|
-
--type-sm: var(--type-product-sm);
|
|
418
|
-
--type-sm--line-height: var(--type-product-sm--line-height);
|
|
419
|
-
--type-base: var(--type-product-base);
|
|
420
|
-
--type-base--line-height: var(--type-product-base--line-height);
|
|
421
|
-
--type-lg: var(--type-product-lg);
|
|
422
|
-
--type-lg--line-height: var(--type-product-lg--line-height);
|
|
423
|
-
--type-xl: var(--type-product-xl);
|
|
424
|
-
--type-xl--line-height: var(--type-product-xl--line-height);
|
|
425
|
-
--type-2xl: var(--type-product-2xl);
|
|
426
|
-
--type-2xl--line-height: var(--type-product-2xl--line-height);
|
|
427
|
-
--type-3xl: var(--type-product-3xl);
|
|
428
|
-
--type-3xl--line-height: var(--type-product-3xl--line-height);
|
|
181
|
+
--sidebar: oklch(0.205 0 0);
|
|
182
|
+
--sidebar-foreground: oklch(0.985 0 0);
|
|
183
|
+
--sidebar-primary: oklch(0.488 0.243 264.376); /** shadcn base-nova's dark sidebar-primary, verbatim — the one chromatic value in the neutral base (COL-15 = shadcn). */
|
|
184
|
+
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
185
|
+
--sidebar-accent: oklch(0.269 0 0);
|
|
186
|
+
--sidebar-accent-foreground: oklch(0.985 0 0);
|
|
187
|
+
--sidebar-border: oklch(1 0 0 / 0.1);
|
|
188
|
+
--sidebar-ring: oklch(0.922 0 0);
|
|
429
189
|
}
|
|
430
190
|
|
|
431
191
|
@theme inline {
|
|
@@ -435,43 +195,32 @@
|
|
|
435
195
|
--color-card-foreground: var(--card-foreground);
|
|
436
196
|
--color-popover: var(--popover);
|
|
437
197
|
--color-popover-foreground: var(--popover-foreground);
|
|
438
|
-
--color-surface-1: var(--surface-1);
|
|
439
|
-
--color-surface-2: var(--surface-2);
|
|
440
|
-
--color-surface-3: var(--surface-3);
|
|
441
198
|
--color-primary: var(--primary);
|
|
442
199
|
--color-primary-foreground: var(--primary-foreground);
|
|
443
|
-
--color-primary-hover: var(--primary-hover);
|
|
444
|
-
--color-primary-active: var(--primary-active);
|
|
445
200
|
--color-secondary: var(--secondary);
|
|
446
201
|
--color-secondary-foreground: var(--secondary-foreground);
|
|
447
202
|
--color-muted: var(--muted);
|
|
448
203
|
--color-muted-foreground: var(--muted-foreground);
|
|
449
|
-
--color-muted-foreground-faint: var(--muted-foreground-faint);
|
|
450
204
|
--color-accent: var(--accent);
|
|
451
205
|
--color-accent-foreground: var(--accent-foreground);
|
|
206
|
+
--color-border: var(--border);
|
|
207
|
+
--color-input: var(--input);
|
|
208
|
+
--color-ring: var(--ring);
|
|
452
209
|
--color-destructive: var(--destructive);
|
|
453
210
|
--color-destructive-foreground: var(--destructive-foreground);
|
|
454
|
-
--color-destructive-subtle: var(--destructive-subtle);
|
|
455
211
|
--color-destructive-text: var(--destructive-text);
|
|
456
|
-
--color-destructive-border: var(--destructive-border);
|
|
457
212
|
--color-success: var(--success);
|
|
458
213
|
--color-success-foreground: var(--success-foreground);
|
|
459
|
-
--color-success-subtle: var(--success-subtle);
|
|
460
214
|
--color-success-text: var(--success-text);
|
|
461
215
|
--color-warning: var(--warning);
|
|
462
216
|
--color-warning-foreground: var(--warning-foreground);
|
|
463
|
-
--color-warning-subtle: var(--warning-subtle);
|
|
464
217
|
--color-warning-text: var(--warning-text);
|
|
465
218
|
--color-info: var(--info);
|
|
466
219
|
--color-info-foreground: var(--info-foreground);
|
|
467
|
-
--color-info-subtle: var(--info-subtle);
|
|
468
220
|
--color-info-text: var(--info-text);
|
|
469
|
-
--color-overlay: var(--overlay);
|
|
470
221
|
--color-media-scrim: var(--media-scrim);
|
|
471
222
|
--color-media-scrim-strong: var(--media-scrim-strong);
|
|
472
223
|
--color-media-foreground: var(--media-foreground);
|
|
473
|
-
--color-input: var(--input);
|
|
474
|
-
--color-ring: var(--ring);
|
|
475
224
|
--color-chart-1: var(--chart-1);
|
|
476
225
|
--color-chart-2: var(--chart-2);
|
|
477
226
|
--color-chart-3: var(--chart-3);
|
|
@@ -521,108 +270,66 @@
|
|
|
521
270
|
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
|
522
271
|
--color-sidebar-border: var(--sidebar-border);
|
|
523
272
|
--color-sidebar-ring: var(--sidebar-ring);
|
|
524
|
-
--
|
|
525
|
-
--
|
|
526
|
-
--
|
|
527
|
-
--
|
|
528
|
-
--
|
|
529
|
-
--
|
|
530
|
-
--
|
|
531
|
-
--
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
--text-lg
|
|
550
|
-
--text-
|
|
551
|
-
--text-
|
|
552
|
-
--text-
|
|
553
|
-
--text-
|
|
554
|
-
--text-
|
|
555
|
-
--text-
|
|
556
|
-
--
|
|
557
|
-
--
|
|
558
|
-
--
|
|
559
|
-
--
|
|
560
|
-
--
|
|
561
|
-
--
|
|
562
|
-
--
|
|
563
|
-
--text-
|
|
564
|
-
--text-
|
|
565
|
-
--text-
|
|
566
|
-
--text-
|
|
567
|
-
--text-
|
|
568
|
-
--text-
|
|
569
|
-
--text-
|
|
570
|
-
--text-
|
|
571
|
-
--text-
|
|
572
|
-
--text-
|
|
573
|
-
--text-display-lg--font-weight: 400;
|
|
574
|
-
--text-display-lg--letter-spacing: -0.05em;
|
|
575
|
-
--text-display-xl: 4.5rem;
|
|
576
|
-
--text-display-xl--line-height: 4.75rem;
|
|
577
|
-
--text-display-xl--font-weight: 400;
|
|
578
|
-
--text-display-xl--letter-spacing: -0.06em;
|
|
579
|
-
--text-h1: 1.5rem;
|
|
580
|
-
--text-h1--line-height: 2rem;
|
|
581
|
-
--text-h1--font-weight: 400;
|
|
582
|
-
--text-h1--letter-spacing: -0.02em;
|
|
583
|
-
--text-h2: 1.25rem;
|
|
584
|
-
--text-h2--line-height: 1.75rem;
|
|
585
|
-
--text-h2--font-weight: 400;
|
|
586
|
-
--text-h2--letter-spacing: -0.015em;
|
|
587
|
-
--text-h3: 1.125rem;
|
|
588
|
-
--text-h3--line-height: 1.5rem;
|
|
589
|
-
--text-h3--font-weight: 400;
|
|
590
|
-
--text-h3--letter-spacing: -0.01em;
|
|
591
|
-
--text-h4: 1rem;
|
|
592
|
-
--text-h4--line-height: 1.375rem;
|
|
593
|
-
--text-h4--font-weight: 500;
|
|
594
|
-
--text-label: 0.875rem;
|
|
595
|
-
--text-label--line-height: 1.25rem;
|
|
596
|
-
--text-label--font-weight: 500;
|
|
597
|
-
--text-label--letter-spacing: -0.01em;
|
|
598
|
-
--text-strong: 0.875rem;
|
|
599
|
-
--text-strong--line-height: 1.25rem;
|
|
600
|
-
--text-strong--font-weight: 600;
|
|
601
|
-
--text-strong--letter-spacing: -0.01em;
|
|
602
|
-
--text-label-sm: 0.75rem;
|
|
603
|
-
--text-label-sm--line-height: 1rem;
|
|
604
|
-
--text-label-sm--font-weight: 500;
|
|
605
|
-
--text-label-sm--letter-spacing: -0.01em;
|
|
606
|
-
--text-code: 0.8125rem;
|
|
607
|
-
--text-code--line-height: 1.25rem;
|
|
608
|
-
--text-code--font-weight: 400;
|
|
609
|
-
--text-code-sm: 0.75rem;
|
|
610
|
-
--text-code-sm--line-height: 1rem;
|
|
611
|
-
--text-code-sm--font-weight: 400;
|
|
612
|
-
--text-mono-label: 0.75rem;
|
|
613
|
-
--text-mono-label--line-height: 1rem;
|
|
614
|
-
--text-mono-label--font-weight: 400;
|
|
615
|
-
--text-mono-label--letter-spacing: 0.05em;
|
|
273
|
+
/* Upstream derives its whole radius ramp from --radius (0.6/0.8/1/1.4/1.8/2.2/2.6x). */
|
|
274
|
+
--radius-sm: calc(var(--radius) * 0.6);
|
|
275
|
+
--radius-md: calc(var(--radius) * 0.8);
|
|
276
|
+
--radius-lg: var(--radius);
|
|
277
|
+
--radius-xl: calc(var(--radius) * 1.4);
|
|
278
|
+
--radius-2xl: calc(var(--radius) * 1.8);
|
|
279
|
+
--radius-3xl: calc(var(--radius) * 2.2);
|
|
280
|
+
--radius-4xl: calc(var(--radius) * 2.6);
|
|
281
|
+
/* ── TYP-15 (ours) — HEADING TIER OPTICAL METRICS ────────────────────────────────────
|
|
282
|
+
Geist's published spec splits a COPY tier (letter-spacing 0) from a HEADING tier whose
|
|
283
|
+
letter-spacing goes negative as size grows. This system's copy sizes are 12/14/16 —
|
|
284
|
+
exactly Geist's copy tier — so `text-xs`, `text-sm` and `text-base` are NOT declared
|
|
285
|
+
here: they stay stock, untouched, and the 202 component usages of them render
|
|
286
|
+
byte-identically. Restating them at their stock values would be the same dead
|
|
287
|
+
restatement `restated-motion-reduce` and `restated-focus` exist to reject.
|
|
288
|
+
|
|
289
|
+
SIZES ARE STOCK. Only `--line-height` and `--letter-spacing` move, so TYP-1 stays
|
|
290
|
+
**shadcn** and a pasted shadcn snippet still renders at upstream's size. The size is
|
|
291
|
+
restated on each step anyway because a modifier with no base is meaningless to read,
|
|
292
|
+
and it pins the ramp against a future Tailwind default change.
|
|
293
|
+
|
|
294
|
+
Two of these go LOOSER, not tighter. Stock Tailwind collapses 3xl-7xl toward 1.0, which
|
|
295
|
+
clips Geist's descenders once negative tracking pulls the glyphs together; Vercel runs
|
|
296
|
+
48px at 56px leading, not 48. And stock `text-lg` (1.556) is looser than `text-base`
|
|
297
|
+
(1.5) — non-monotonic, and backwards from the shape this ramp exists to produce. */
|
|
298
|
+
--text-lg: 1.125rem;
|
|
299
|
+
--text-lg--line-height: 1.625rem;
|
|
300
|
+
--text-lg--letter-spacing: -0.012em;
|
|
301
|
+
--text-xl: 1.25rem;
|
|
302
|
+
--text-xl--line-height: 1.625rem;
|
|
303
|
+
--text-xl--letter-spacing: -0.02em;
|
|
304
|
+
--text-2xl: 1.5rem;
|
|
305
|
+
--text-2xl--line-height: 2rem;
|
|
306
|
+
--text-2xl--letter-spacing: -0.04em;
|
|
307
|
+
--text-3xl: 1.875rem;
|
|
308
|
+
--text-3xl--line-height: 2.375rem;
|
|
309
|
+
--text-3xl--letter-spacing: -0.04em;
|
|
310
|
+
--text-4xl: 2.25rem;
|
|
311
|
+
--text-4xl--line-height: 2.75rem;
|
|
312
|
+
--text-4xl--letter-spacing: -0.05em;
|
|
313
|
+
--text-5xl: 3rem;
|
|
314
|
+
--text-5xl--line-height: 3.5rem;
|
|
315
|
+
--text-5xl--letter-spacing: -0.06em;
|
|
316
|
+
--text-6xl: 3.75rem;
|
|
317
|
+
--text-6xl--line-height: 4rem;
|
|
318
|
+
--text-6xl--letter-spacing: -0.06em;
|
|
319
|
+
--text-7xl: 4.5rem;
|
|
320
|
+
--text-7xl--line-height: 4.5rem;
|
|
321
|
+
--text-7xl--letter-spacing: -0.06em;
|
|
616
322
|
--font-sans: var(--font-family-sans);
|
|
617
323
|
--font-mono: var(--font-family-mono);
|
|
618
324
|
--font-serif: var(--font-family-serif);
|
|
619
325
|
--font-display: var(--font-family-display);
|
|
620
|
-
--font-
|
|
326
|
+
--font-heading: var(--font-family-sans);
|
|
327
|
+
/* MOT-2 is shadcn, so nothing pairs a duration with an ease any more. These four eases and
|
|
328
|
+
three durations exist for the MOT-6/MOT-7 utilities in utilities.css, which are ours. */
|
|
621
329
|
--ease-standard: var(--motion-ease-standard);
|
|
622
330
|
--ease-emphasized: var(--motion-ease-emphasized);
|
|
623
331
|
--ease-exit: var(--motion-ease-exit);
|
|
624
332
|
--ease-spring: var(--motion-ease-spring);
|
|
625
|
-
--blur-motion: var(--motion-blur);
|
|
626
333
|
--transition-duration-fast: var(--duration-fast);
|
|
627
334
|
--transition-duration-base: var(--duration-base);
|
|
628
335
|
--transition-duration-slow: var(--duration-slow);
|