tyrell-components 1.0.0-RC12 → 1.0.0-RC13

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.
Files changed (178) hide show
  1. package/README.md +1 -0
  2. package/css/tyrell-colors-static.css +316 -0
  3. package/css/tyrell-theme.css +1454 -0
  4. package/css/tyrell.css +108 -423
  5. package/dist/tyrell-colors-static.css +316 -0
  6. package/dist/tyrell-theme.css +1454 -0
  7. package/dist/tyrell.css +108 -423
  8. package/dist/tyrell.js +1 -1
  9. package/lib/components/button.d.ts +7 -0
  10. package/lib/components/button.d.ts.map +1 -1
  11. package/lib/components/button.js +12 -1
  12. package/lib/components/button.js.map +1 -1
  13. package/lib/components/calendar-month.d.ts +17 -0
  14. package/lib/components/calendar-month.d.ts.map +1 -1
  15. package/lib/components/calendar-month.js +121 -7
  16. package/lib/components/calendar-month.js.map +1 -1
  17. package/lib/components/calendar.d.ts +3 -1
  18. package/lib/components/calendar.d.ts.map +1 -1
  19. package/lib/components/calendar.js +19 -9
  20. package/lib/components/calendar.js.map +1 -1
  21. package/lib/components/checkbox.d.ts +4 -3
  22. package/lib/components/checkbox.d.ts.map +1 -1
  23. package/lib/components/checkbox.js +23 -35
  24. package/lib/components/checkbox.js.map +1 -1
  25. package/lib/components/copy.d.ts +4 -3
  26. package/lib/components/copy.d.ts.map +1 -1
  27. package/lib/components/copy.js +22 -21
  28. package/lib/components/copy.js.map +1 -1
  29. package/lib/components/date-picker.d.ts +12 -1
  30. package/lib/components/date-picker.d.ts.map +1 -1
  31. package/lib/components/date-picker.js +122 -32
  32. package/lib/components/date-picker.js.map +1 -1
  33. package/lib/components/input.d.ts +3 -2
  34. package/lib/components/input.d.ts.map +1 -1
  35. package/lib/components/input.js +24 -21
  36. package/lib/components/input.js.map +1 -1
  37. package/lib/components/modal.d.ts.map +1 -1
  38. package/lib/components/modal.js +22 -3
  39. package/lib/components/modal.js.map +1 -1
  40. package/lib/components/option.d.ts +0 -11
  41. package/lib/components/option.d.ts.map +1 -1
  42. package/lib/components/option.js +4 -103
  43. package/lib/components/option.js.map +1 -1
  44. package/lib/components/popup.d.ts.map +1 -1
  45. package/lib/components/popup.js +36 -2
  46. package/lib/components/popup.js.map +1 -1
  47. package/lib/components/radio.d.ts +5 -2
  48. package/lib/components/radio.d.ts.map +1 -1
  49. package/lib/components/radio.js +16 -5
  50. package/lib/components/radio.js.map +1 -1
  51. package/lib/components/select.d.ts +119 -9
  52. package/lib/components/select.d.ts.map +1 -1
  53. package/lib/components/select.js +426 -58
  54. package/lib/components/select.js.map +1 -1
  55. package/lib/components/selected-tags.d.ts +19 -6
  56. package/lib/components/selected-tags.d.ts.map +1 -1
  57. package/lib/components/selected-tags.js +43 -7
  58. package/lib/components/selected-tags.js.map +1 -1
  59. package/lib/components/switch.d.ts +4 -3
  60. package/lib/components/switch.d.ts.map +1 -1
  61. package/lib/components/switch.js +17 -29
  62. package/lib/components/switch.js.map +1 -1
  63. package/lib/components/tabs.d.ts.map +1 -1
  64. package/lib/components/tabs.js +180 -25
  65. package/lib/components/tabs.js.map +1 -1
  66. package/lib/components/tag.js +1 -1
  67. package/lib/components/tag.js.map +1 -1
  68. package/lib/components/tooltip.d.ts +4 -2
  69. package/lib/components/tooltip.d.ts.map +1 -1
  70. package/lib/components/tooltip.js +109 -70
  71. package/lib/components/tooltip.js.map +1 -1
  72. package/lib/components/wizard.d.ts.map +1 -1
  73. package/lib/components/wizard.js +22 -3
  74. package/lib/components/wizard.js.map +1 -1
  75. package/lib/index.d.ts +2 -1
  76. package/lib/index.d.ts.map +1 -1
  77. package/lib/index.js +2 -1
  78. package/lib/index.js.map +1 -1
  79. package/lib/styles/button.d.ts +36 -6
  80. package/lib/styles/button.d.ts.map +1 -1
  81. package/lib/styles/button.js +239 -36
  82. package/lib/styles/button.js.map +1 -1
  83. package/lib/styles/calendar-month.d.ts +3 -1
  84. package/lib/styles/calendar-month.d.ts.map +1 -1
  85. package/lib/styles/calendar-month.js +64 -9
  86. package/lib/styles/calendar-month.js.map +1 -1
  87. package/lib/styles/calendar-navigation.d.ts +1 -1
  88. package/lib/styles/calendar-navigation.d.ts.map +1 -1
  89. package/lib/styles/calendar-navigation.js +1 -1
  90. package/lib/styles/checkbox.d.ts +3 -1
  91. package/lib/styles/checkbox.d.ts.map +1 -1
  92. package/lib/styles/checkbox.js +33 -55
  93. package/lib/styles/checkbox.js.map +1 -1
  94. package/lib/styles/copy.d.ts +3 -1
  95. package/lib/styles/copy.d.ts.map +1 -1
  96. package/lib/styles/copy.js +29 -6
  97. package/lib/styles/copy.js.map +1 -1
  98. package/lib/styles/custom-scrollbar.d.ts +1 -1
  99. package/lib/styles/custom-scrollbar.d.ts.map +1 -1
  100. package/lib/styles/custom-scrollbar.js +2 -2
  101. package/lib/styles/date-picker.d.ts +3 -1
  102. package/lib/styles/date-picker.d.ts.map +1 -1
  103. package/lib/styles/date-picker.js +53 -99
  104. package/lib/styles/date-picker.js.map +1 -1
  105. package/lib/styles/file-upload.d.ts +1 -1
  106. package/lib/styles/file-upload.d.ts.map +1 -1
  107. package/lib/styles/file-upload.js +3 -3
  108. package/lib/styles/input.d.ts +3 -1
  109. package/lib/styles/input.d.ts.map +1 -1
  110. package/lib/styles/input.js +67 -123
  111. package/lib/styles/input.js.map +1 -1
  112. package/lib/styles/multiselect.d.ts +3 -1
  113. package/lib/styles/multiselect.d.ts.map +1 -1
  114. package/lib/styles/multiselect.js +26 -2
  115. package/lib/styles/multiselect.js.map +1 -1
  116. package/lib/styles/option.d.ts +1 -1
  117. package/lib/styles/option.d.ts.map +1 -1
  118. package/lib/styles/option.js +0 -51
  119. package/lib/styles/option.js.map +1 -1
  120. package/lib/styles/radio.d.ts +3 -1
  121. package/lib/styles/radio.d.ts.map +1 -1
  122. package/lib/styles/radio.js +24 -21
  123. package/lib/styles/radio.js.map +1 -1
  124. package/lib/styles/scroll-container.d.ts +1 -1
  125. package/lib/styles/scroll-container.d.ts.map +1 -1
  126. package/lib/styles/select-base.d.ts +9 -0
  127. package/lib/styles/select-base.d.ts.map +1 -0
  128. package/lib/styles/select-base.js +973 -0
  129. package/lib/styles/select-base.js.map +1 -0
  130. package/lib/styles/select.d.ts +3 -3
  131. package/lib/styles/select.d.ts.map +1 -1
  132. package/lib/styles/select.js +98 -30
  133. package/lib/styles/select.js.map +1 -1
  134. package/lib/styles/step.d.ts +1 -1
  135. package/lib/styles/step.d.ts.map +1 -1
  136. package/lib/styles/switch.d.ts +3 -1
  137. package/lib/styles/switch.d.ts.map +1 -1
  138. package/lib/styles/switch.js +25 -10
  139. package/lib/styles/switch.js.map +1 -1
  140. package/lib/styles/tab.d.ts +1 -1
  141. package/lib/styles/tab.d.ts.map +1 -1
  142. package/lib/styles/tabs.d.ts +1 -1
  143. package/lib/styles/tabs.d.ts.map +1 -1
  144. package/lib/styles/tabs.js +71 -1
  145. package/lib/styles/tabs.js.map +1 -1
  146. package/lib/styles/tag.d.ts.map +1 -1
  147. package/lib/styles/tag.js +4 -1
  148. package/lib/styles/tag.js.map +1 -1
  149. package/lib/styles/textarea.d.ts +1 -1
  150. package/lib/styles/textarea.d.ts.map +1 -1
  151. package/lib/styles/textarea.js +5 -5
  152. package/lib/styles/tooltip.d.ts +4 -2
  153. package/lib/styles/tooltip.d.ts.map +1 -1
  154. package/lib/styles/tooltip.js +4 -119
  155. package/lib/styles/tooltip.js.map +1 -1
  156. package/lib/styles/wizard.d.ts +1 -1
  157. package/lib/styles/wizard.d.ts.map +1 -1
  158. package/lib/styles/wizard.js +18 -6
  159. package/lib/styles/wizard.js.map +1 -1
  160. package/lib/types/common.d.ts +1 -1
  161. package/lib/types/common.d.ts.map +1 -1
  162. package/lib/types/common.js +3 -1
  163. package/lib/types/common.js.map +1 -1
  164. package/lib/utils/icons.d.ts +10 -0
  165. package/lib/utils/icons.d.ts.map +1 -0
  166. package/lib/utils/icons.js +10 -0
  167. package/lib/utils/icons.js.map +1 -0
  168. package/lib/utils/loader-registry.d.ts +2 -2
  169. package/lib/utils/loader-registry.js +2 -2
  170. package/lib/utils/positioning.d.ts +31 -0
  171. package/lib/utils/positioning.d.ts.map +1 -1
  172. package/lib/utils/positioning.js +22 -3
  173. package/lib/utils/positioning.js.map +1 -1
  174. package/lib/version.d.ts +1 -1
  175. package/lib/version.js +1 -1
  176. package/package.json +7 -4
  177. package/css/tyrell-brand.css +0 -1015
  178. package/dist/tyrell-brand.css +0 -1015
@@ -1,1015 +0,0 @@
1
- /* =====================================================================
2
- * tyrell-brand.css — OKLCH-based brand layer for Tyrell Components
3
- * =====================================================================
4
- *
5
- * Opt-in. Load AFTER `tyrell.css`. Override a few variables to rebrand.
6
- *
7
- * <link rel="stylesheet" href=".../tyrell.css">
8
- * <link rel="stylesheet" href=".../tyrell-brand.css">
9
- *
10
- * :root {
11
- * --ty-brand-hue: 200; // teal. Try 260 indigo, 30 orange, 145 emerald.
12
- * --ty-brand-chroma: 0.13;
13
- * }
14
- *
15
- * =====================================================================
16
- * THE FORMULA
17
- * =====================================================================
18
- *
19
- * Every color in the library is one formula on five axes:
20
- *
21
- * oklch(
22
- * L = L-curve[shade] × flavor-l-factor ← Tier 3 × Tier 5
23
- * C = flavor-chroma × saturation-curve[shade] ← Tier 2 × Tier 4
24
- * H = flavor-hue ← Tier 2
25
- * )
26
- *
27
- * Pick a flavor (primary / secondary / success / warning / danger /
28
- * neutral). Pick a shade (strong / bold / base / soft / faint). That's
29
- * the cell; the formula gives you its color.
30
- *
31
- * FLAVOR axis — which semantic role (carries its own hue, chroma,
32
- * l-factor seeds)
33
- * SHADE axis — 5 emphasis stops shared across flavors
34
- * (strong / bold / base / soft / faint)
35
- * HUE axis — what color family (0°–360°)
36
- * CHROMA axis — how saturated (0 = grey, ~0.4 = max vivid)
37
- * L axis — how dark or light (0 = black, 1 = white)
38
- * Light mode: low L = more emphasis.
39
- * Dark mode: high L = more emphasis (curve flips).
40
- *
41
- * Worked example — `--ty-color-warning-bold` in LIGHT mode:
42
- *
43
- * L = 0.46 × 1 = 0.46 ← l-bold × warning-l-factor
44
- * C = 0.26 × 1.00 = 0.26 ← warning-chroma × c-bold-mult
45
- * H = 75° ← warning-hue
46
- * → oklch(0.46 0.26 75) (a punchy amber for +1 emphasis text)
47
- *
48
- * Want warning a notch darker without touching anything else? Set
49
- * `--ty-warning-l-factor: 0.85` and the new L becomes 0.46 × 0.85 =
50
- * 0.39. Every warning shade shifts in step; primary / success / danger
51
- * are untouched.
52
- *
53
- * =====================================================================
54
- * FILE LAYOUT
55
- * =====================================================================
56
- *
57
- * SECTION 1 — KNOBS
58
- * The variables you might want to override. Six tiers from drop-in
59
- * rebrand (Tier 1) to surgical per-flavor tweak (Tier 5) plus solid
60
- * buttons (Tier 6).
61
- *
62
- * SECTION 2 — IMPLEMENTATION
63
- * The oklch() expressions that wire the knobs through to the actual
64
- * color tokens. Rarely needs editing — Section 1 is the contract.
65
- *
66
- * Browser support: oklch() is in every evergreen browser since mid-2023.
67
- * Tier 6 (solid) additionally uses OKLCH relative color — oklch(from …) —
68
- * which lands later: Chrome 119, Safari 16.4, Firefox 128 (mid-2024).
69
- * Solid fills have no fallback below those versions.
70
- *
71
- * ===================================================================== */
72
-
73
- /* =====================================================================
74
- * SECTION 1 — KNOBS
75
- * =====================================================================
76
- *
77
- * Five tiers, ordered by how often you'd touch them. Override any of
78
- * these in your own `:root` (or `html.dark` for per-mode tuning) —
79
- * your declaration wins by source order.
80
- *
81
- * Tier 1 — SEEDS brand-hue + chroma. Rebrand in 2 lines.
82
- * Tier 2 — PER-FLAVOR ANCHORS each flavor's hue + chroma.
83
- * Tier 3 — L-CURVE 5 lightness stops for the emphasis ramp.
84
- * Tier 4 — SATURATION CURVE per-shade chroma multipliers.
85
- * Tier 5 — PER-FLAVOR L-FACTOR per-flavor lightness multiplier — push
86
- * one flavor up or down without touching
87
- * the others. Default 1.
88
- * Tier 6 — SOLID FILLS solid-button system: hover/active/tone
89
- * L offsets + per-theme dim/desaturate.
90
- * ===================================================================== */
91
-
92
- :root {
93
- /* ----------------------------------------------------------------
94
- * Tier 1 — SEEDS
95
- * Brand-hue + chroma drive primary, neutral, surfaces, inputs,
96
- * solid buttons. One slider rebrands the page.
97
- * --------------------------------------------------------------*/
98
-
99
- --ty-brand-hue: 230;
100
- --ty-brand-chroma: 0.12; /* restrained EU default; the loud 0.2 read as "bollywood" */
101
-
102
- /* Surface tint. 0 = monochrome surfaces (default, no brand leak).
103
- * Bump to ~0.005 (light) / ~0.012 (dark) to warm surfaces toward brand. */
104
- --ty-surface-chroma: 0;
105
-
106
- /* Secondary rotates from brand by an exposed offset. Default +60°
107
- * (sibling accent). Try 30° for a close sibling, 120° for triadic,
108
- * 180° for complement. Set --ty-secondary-hue to a literal number
109
- * to detach completely. */
110
- --ty-secondary-offset: 60;
111
-
112
- /* ----------------------------------------------------------------
113
- * Tier 2 — PER-FLAVOR ANCHORS
114
- * Semantic colors (success/warning/danger/neutral) have their own
115
- * hue + chroma seeds so they keep meaning across brand changes.
116
- * Override any individually:
117
- * --ty-success-hue: 160; (more teal)
118
- * --ty-warning-chroma: 0.2; (more vivid)
119
- * --------------------------------------------------------------*/
120
-
121
- --ty-secondary-hue: calc(var(--ty-brand-hue) + var(--ty-secondary-offset));
122
- --ty-secondary-chroma: var(--ty-brand-chroma);
123
-
124
- --ty-success-hue: 145;
125
- --ty-success-chroma: calc(var(--ty-brand-chroma) * 1.08);
126
-
127
- --ty-warning-hue: 75;
128
- --ty-warning-chroma: calc(var(--ty-brand-chroma) * 2);
129
-
130
- --ty-danger-hue: 25;
131
- --ty-danger-chroma: calc(var(--ty-brand-chroma) * 1.31);
132
-
133
- --ty-neutral-hue: var(--ty-brand-hue);
134
- --ty-neutral-chroma: calc(var(--ty-brand-chroma) * 0.04);
135
-
136
- /* ----------------------------------------------------------------
137
- * Tier 3 — L-CURVE (light mode)
138
- * 5 lightness stops per flavor for the emphasis ramp.
139
- * Lower L = darker = more emphasis in light mode.
140
- * Plus 3 bg L stops for the soft-tint backgrounds.
141
- * --------------------------------------------------------------*/
142
-
143
- --ty-l-strong: 0.38; /* ++ max emphasis */
144
- --ty-l-bold: 0.46; /* + high emphasis */
145
- --ty-l-base: 0.54; /* body */
146
- --ty-l-soft: 0.72; /* - low emphasis */
147
- --ty-l-faint: 0.88; /* -- min emphasis */
148
-
149
- --ty-l-bg-base: 0.96;
150
- --ty-l-bg-bold: 0.92;
151
- --ty-l-bg-soft: 0.98;
152
-
153
- /* ----------------------------------------------------------------
154
- * Tier 4 — SATURATION CURVE
155
- * Per-shade chroma multipliers. Each shade's chroma =
156
- * flavor-chroma × multiplier. Drops near the extremes so
157
- * near-white and near-black can hold their tint.
158
- * --------------------------------------------------------------*/
159
-
160
- --ty-c-strong-mult: 0.77;
161
- --ty-c-bold-mult: 1;
162
- --ty-c-base-mult: 0.92;
163
- --ty-c-soft-mult: 0.77;
164
- --ty-c-faint-mult: 0.46;
165
-
166
- --ty-c-bg-base-mult: 0.15;
167
- --ty-c-bg-bold-mult: 0.38;
168
- --ty-c-bg-soft-mult: 0.08;
169
-
170
- /* ----------------------------------------------------------------
171
- * Tier 5 — PER-FLAVOR L-FACTOR
172
- * Multiplies the L-curve values for that flavor only. Default 1 =
173
- * no change. Useful when one flavor's brand-default sits too close
174
- * to brand-hue on the wheel and the buttons blend.
175
- *
176
- * Example: brand-hue: 47° (gold). Warning sits at 75° (amber).
177
- * Both render as similar warm browns at brand-chroma. Drop warning
178
- * a notch and it darkens enough to stand apart:
179
- * --ty-warning-l-factor: 0.85;
180
- *
181
- * NOTE: the L-curve flips between light and dark mode, so a factor
182
- * < 1 darkens in light mode but DIMS in dark mode. If you want
183
- * symmetric "more emphatic" in both modes, set the factor here for
184
- * light AND set its inverse (1 / factor, roughly) in `html.dark`.
185
- * --------------------------------------------------------------*/
186
-
187
- --ty-primary-l-factor: 1;
188
- --ty-secondary-l-factor: 1;
189
- --ty-success-l-factor: 1;
190
- --ty-warning-l-factor: 1.15;
191
- --ty-danger-l-factor: 1;
192
- --ty-neutral-l-factor: 1;
193
-
194
- /* ----------------------------------------------------------------
195
- * Tier 6 — SOLID FILLS
196
- * Solid buttons are their OWN system, not the emphasis ramp. Each
197
- * flavor's fill defaults to --ty-color-{flavor}; the knobs below
198
- * derive its hover / active / tone+ / tone- and per-theme adjust.
199
- * Math lives in SECTION 2 (search "Tier 6 — SOLID"); these are the
200
- * dials.
201
- *
202
- * Axis A — interaction & tone, OKLCH L offsets on the fill.
203
- * Axis B — per-theme adjust applied to the base fill (dim/desaturate).
204
- *
205
- * NOTE: like Tier 5, the emphasis curve flips for dark, so these L
206
- * offsets are sign-flipped in `html.dark` below (darken in light =
207
- * lighten in dark). Keep the two blocks in sync.
208
- * --------------------------------------------------------------*/
209
-
210
- /* Axis A — interaction (light: darken on press, so offsets are negative) */
211
- --ty-solid-hover-l: -0.04; /* :hover */
212
- --ty-solid-active-l: -0.08; /* :active */
213
- --ty-solid-strong-l: -0.06; /* tone+ */
214
- --ty-solid-soft-l: 0.1; /* tone- */
215
-
216
- /* Axis B — per-theme adjust (light reads fine → identity) */
217
- --ty-solid-l: 0; /* lightness offset — negative dims */
218
- --ty-solid-c: 1; /* chroma multiplier — <1 desaturates */
219
- --ty-solid-h: 0; /* hue offset (deg) */
220
- }
221
-
222
- /* Dark mode overrides for the L-curve and saturation curve. Tier 1 + 2
223
- * seeds and Tier 5 L-factors carry through unchanged from :root. */
224
- html.dark,
225
- html[data-theme="dark"] {
226
- /* Tier 3 dark — inverted curve. Higher L = lighter text = more
227
- * emphasis on a dark background. */
228
- --ty-l-strong: 0.72;
229
- --ty-l-bold: 0.66;
230
- --ty-l-base: 0.62;
231
- --ty-l-soft: 0.46;
232
- --ty-l-faint: 0.3;
233
-
234
- --ty-l-bg-base: 0.22;
235
- --ty-l-bg-bold: 0.26;
236
- --ty-l-bg-soft: 0.19;
237
-
238
- /* Tier 4 dark — dim shades hold more chroma so they don't grey out;
239
- * strong shades trim chroma so bright tones don't over-pop. */
240
- --ty-c-strong-mult: 0.77;
241
- --ty-c-bold-mult: 1;
242
- --ty-c-base-mult: 0.92;
243
- --ty-c-soft-mult: 0.77;
244
- --ty-c-faint-mult: 0.5;
245
-
246
- --ty-c-bg-base-mult: 0.38;
247
- --ty-c-bg-bold-mult: 0.54;
248
- --ty-c-bg-soft-mult: 0.23;
249
-
250
- /* Tier 6 dark — interaction offsets flip sign (press LIGHTENS on dark),
251
- * and the per-theme adjust dims + desaturates the fills against the
252
- * dark canvas. (Computed solid tokens live in SECTION 2 DARK.) */
253
- --ty-solid-hover-l: 0.04; /* :hover */
254
- --ty-solid-active-l: 0.08; /* :active */
255
- --ty-solid-strong-l: 0.06; /* tone+ */
256
- --ty-solid-soft-l: -0.1; /* tone- */
257
-
258
- --ty-solid-l: -0.25; /* dim against dark canvas */
259
- --ty-solid-c: 0.65; /* desaturate against dark canvas */
260
- --ty-solid-h: 0; /* hue offset */
261
- }
262
-
263
- /* =====================================================================
264
- * SECTION 2 — IMPLEMENTATION
265
- * =====================================================================
266
- *
267
- * The oklch() expressions that turn Section 1's knobs into the actual
268
- * --ty-color-*, --ty-bg-*, --ty-border-*, --ty-surface-*, --ty-input-*,
269
- * and --ty-solid-* tokens that components read.
270
- *
271
- * Pattern for each flavor's 5-shade fg ramp + 3-shade bg ramp:
272
- *
273
- * --ty-color-{flavor}-{shade}: oklch(
274
- * calc(var(--ty-l-{shade}) * var(--ty-{flavor}-l-factor)) ← L
275
- * calc(var(--ty-{flavor}-chroma) * var(--ty-c-{shade}-mult)) ← C
276
- * var(--ty-{flavor}-hue) ← H
277
- * );
278
- *
279
- * Computed tokens are declared in BOTH `:root` and `html.dark` blocks
280
- * because tyrell.css ships hardcoded dark-mode hexes at html.dark
281
- * specificity (0,1,1); our brand-layer `:root` (0,1,0) would lose
282
- * source-order otherwise. Same math both blocks — just different L/C
283
- * inputs from Tier 3/4.
284
- * ===================================================================== */
285
-
286
- :root {
287
- /* ----------------------------------------------------------------
288
- * Flavor color ramps (fg + bg + border)
289
- * --------------------------------------------------------------*/
290
-
291
- /* Primary */
292
- --ty-color-primary-strong: oklch(
293
- calc(var(--ty-l-strong) * var(--ty-primary-l-factor))
294
- calc(var(--ty-brand-chroma) * var(--ty-c-strong-mult)) var(--ty-brand-hue)
295
- );
296
- --ty-color-primary-bold: oklch(
297
- calc(var(--ty-l-bold) * var(--ty-primary-l-factor))
298
- calc(var(--ty-brand-chroma) * var(--ty-c-bold-mult)) var(--ty-brand-hue)
299
- );
300
- --ty-color-primary: oklch(
301
- calc(var(--ty-l-base) * var(--ty-primary-l-factor))
302
- calc(var(--ty-brand-chroma) * var(--ty-c-base-mult)) var(--ty-brand-hue)
303
- );
304
- --ty-color-primary-soft: oklch(
305
- calc(var(--ty-l-soft) * var(--ty-primary-l-factor))
306
- calc(var(--ty-brand-chroma) * var(--ty-c-soft-mult)) var(--ty-brand-hue)
307
- );
308
- --ty-color-primary-faint: oklch(
309
- calc(var(--ty-l-faint) * var(--ty-primary-l-factor))
310
- calc(var(--ty-brand-chroma) * var(--ty-c-faint-mult)) var(--ty-brand-hue)
311
- );
312
- --ty-bg-primary: oklch(
313
- calc(var(--ty-l-bg-base) * var(--ty-primary-l-factor))
314
- calc(var(--ty-brand-chroma) * var(--ty-c-bg-base-mult))
315
- var(--ty-brand-hue)
316
- );
317
- --ty-bg-primary-bold: oklch(
318
- calc(var(--ty-l-bg-bold) * var(--ty-primary-l-factor))
319
- calc(var(--ty-brand-chroma) * var(--ty-c-bg-bold-mult))
320
- var(--ty-brand-hue)
321
- );
322
- --ty-bg-primary-soft: oklch(
323
- calc(var(--ty-l-bg-soft) * var(--ty-primary-l-factor))
324
- calc(var(--ty-brand-chroma) * var(--ty-c-bg-soft-mult))
325
- var(--ty-brand-hue)
326
- );
327
- --ty-border-primary: var(--ty-color-primary-soft);
328
-
329
- /* Secondary */
330
- --ty-color-secondary-strong: oklch(
331
- calc(var(--ty-l-strong) * var(--ty-secondary-l-factor))
332
- calc(var(--ty-secondary-chroma) * var(--ty-c-strong-mult))
333
- var(--ty-secondary-hue)
334
- );
335
- --ty-color-secondary-bold: oklch(
336
- calc(var(--ty-l-bold) * var(--ty-secondary-l-factor))
337
- calc(var(--ty-secondary-chroma) * var(--ty-c-bold-mult))
338
- var(--ty-secondary-hue)
339
- );
340
- --ty-color-secondary: oklch(
341
- calc(var(--ty-l-base) * var(--ty-secondary-l-factor))
342
- calc(var(--ty-secondary-chroma) * var(--ty-c-base-mult))
343
- var(--ty-secondary-hue)
344
- );
345
- --ty-color-secondary-soft: oklch(
346
- calc(var(--ty-l-soft) * var(--ty-secondary-l-factor))
347
- calc(var(--ty-secondary-chroma) * var(--ty-c-soft-mult))
348
- var(--ty-secondary-hue)
349
- );
350
- --ty-color-secondary-faint: oklch(
351
- calc(var(--ty-l-faint) * var(--ty-secondary-l-factor))
352
- calc(var(--ty-secondary-chroma) * var(--ty-c-faint-mult))
353
- var(--ty-secondary-hue)
354
- );
355
- --ty-bg-secondary: oklch(
356
- calc(var(--ty-l-bg-base) * var(--ty-secondary-l-factor))
357
- calc(var(--ty-secondary-chroma) * var(--ty-c-bg-base-mult))
358
- var(--ty-secondary-hue)
359
- );
360
- --ty-bg-secondary-bold: oklch(
361
- calc(var(--ty-l-bg-bold) * var(--ty-secondary-l-factor))
362
- calc(var(--ty-secondary-chroma) * var(--ty-c-bg-bold-mult))
363
- var(--ty-secondary-hue)
364
- );
365
- --ty-bg-secondary-soft: oklch(
366
- calc(var(--ty-l-bg-soft) * var(--ty-secondary-l-factor))
367
- calc(var(--ty-secondary-chroma) * var(--ty-c-bg-soft-mult))
368
- var(--ty-secondary-hue)
369
- );
370
- --ty-border-secondary: var(--ty-color-secondary-soft);
371
-
372
- /* Success */
373
- --ty-color-success-strong: oklch(
374
- calc(var(--ty-l-strong) * var(--ty-success-l-factor))
375
- calc(var(--ty-success-chroma) * var(--ty-c-strong-mult))
376
- var(--ty-success-hue)
377
- );
378
- --ty-color-success-bold: oklch(
379
- calc(var(--ty-l-bold) * var(--ty-success-l-factor))
380
- calc(var(--ty-success-chroma) * var(--ty-c-bold-mult))
381
- var(--ty-success-hue)
382
- );
383
- --ty-color-success: oklch(
384
- calc(var(--ty-l-base) * var(--ty-success-l-factor))
385
- calc(var(--ty-success-chroma) * var(--ty-c-base-mult))
386
- var(--ty-success-hue)
387
- );
388
- --ty-color-success-soft: oklch(
389
- calc(var(--ty-l-soft) * var(--ty-success-l-factor))
390
- calc(var(--ty-success-chroma) * var(--ty-c-soft-mult))
391
- var(--ty-success-hue)
392
- );
393
- --ty-color-success-faint: oklch(
394
- calc(var(--ty-l-faint) * var(--ty-success-l-factor))
395
- calc(var(--ty-success-chroma) * var(--ty-c-faint-mult))
396
- var(--ty-success-hue)
397
- );
398
- --ty-bg-success: oklch(
399
- calc(var(--ty-l-bg-base) * var(--ty-success-l-factor))
400
- calc(var(--ty-success-chroma) * var(--ty-c-bg-base-mult))
401
- var(--ty-success-hue)
402
- );
403
- --ty-bg-success-bold: oklch(
404
- calc(var(--ty-l-bg-bold) * var(--ty-success-l-factor))
405
- calc(var(--ty-success-chroma) * var(--ty-c-bg-bold-mult))
406
- var(--ty-success-hue)
407
- );
408
- --ty-bg-success-soft: oklch(
409
- calc(var(--ty-l-bg-soft) * var(--ty-success-l-factor))
410
- calc(var(--ty-success-chroma) * var(--ty-c-bg-soft-mult))
411
- var(--ty-success-hue)
412
- );
413
- --ty-border-success: var(--ty-color-success-soft);
414
-
415
- /* Danger */
416
- --ty-color-danger-strong: oklch(
417
- calc(var(--ty-l-strong) * var(--ty-danger-l-factor))
418
- calc(var(--ty-danger-chroma) * var(--ty-c-strong-mult))
419
- var(--ty-danger-hue)
420
- );
421
- --ty-color-danger-bold: oklch(
422
- calc(var(--ty-l-bold) * var(--ty-danger-l-factor))
423
- calc(var(--ty-danger-chroma) * var(--ty-c-bold-mult)) var(--ty-danger-hue)
424
- );
425
- --ty-color-danger: oklch(
426
- calc(var(--ty-l-base) * var(--ty-danger-l-factor))
427
- calc(var(--ty-danger-chroma) * var(--ty-c-base-mult)) var(--ty-danger-hue)
428
- );
429
- --ty-color-danger-soft: oklch(
430
- calc(var(--ty-l-soft) * var(--ty-danger-l-factor))
431
- calc(var(--ty-danger-chroma) * var(--ty-c-soft-mult)) var(--ty-danger-hue)
432
- );
433
- --ty-color-danger-faint: oklch(
434
- calc(var(--ty-l-faint) * var(--ty-danger-l-factor))
435
- calc(var(--ty-danger-chroma) * var(--ty-c-faint-mult))
436
- var(--ty-danger-hue)
437
- );
438
- --ty-bg-danger: oklch(
439
- calc(var(--ty-l-bg-base) * var(--ty-danger-l-factor))
440
- calc(var(--ty-danger-chroma) * var(--ty-c-bg-base-mult))
441
- var(--ty-danger-hue)
442
- );
443
- --ty-bg-danger-bold: oklch(
444
- calc(var(--ty-l-bg-bold) * var(--ty-danger-l-factor))
445
- calc(var(--ty-danger-chroma) * var(--ty-c-bg-bold-mult))
446
- var(--ty-danger-hue)
447
- );
448
- --ty-bg-danger-soft: oklch(
449
- calc(var(--ty-l-bg-soft) * var(--ty-danger-l-factor))
450
- calc(var(--ty-danger-chroma) * var(--ty-c-bg-soft-mult))
451
- var(--ty-danger-hue)
452
- );
453
- --ty-border-danger: var(--ty-color-danger-soft);
454
-
455
- /* Warning */
456
- --ty-color-warning-strong: oklch(
457
- calc(var(--ty-l-strong) * var(--ty-warning-l-factor))
458
- calc(var(--ty-warning-chroma) * var(--ty-c-strong-mult))
459
- var(--ty-warning-hue)
460
- );
461
- --ty-color-warning-bold: oklch(
462
- calc(var(--ty-l-bold) * var(--ty-warning-l-factor))
463
- calc(var(--ty-warning-chroma) * var(--ty-c-bold-mult))
464
- var(--ty-warning-hue)
465
- );
466
- --ty-color-warning: oklch(
467
- calc(var(--ty-l-base) * var(--ty-warning-l-factor))
468
- calc(var(--ty-warning-chroma) * var(--ty-c-base-mult))
469
- var(--ty-warning-hue)
470
- );
471
- --ty-color-warning-soft: oklch(
472
- calc(var(--ty-l-soft) * var(--ty-warning-l-factor))
473
- calc(var(--ty-warning-chroma) * var(--ty-c-soft-mult))
474
- var(--ty-warning-hue)
475
- );
476
- --ty-color-warning-faint: oklch(
477
- calc(var(--ty-l-faint) * var(--ty-warning-l-factor))
478
- calc(var(--ty-warning-chroma) * var(--ty-c-faint-mult))
479
- var(--ty-warning-hue)
480
- );
481
- --ty-bg-warning: oklch(
482
- calc(var(--ty-l-bg-base) * var(--ty-warning-l-factor))
483
- calc(var(--ty-warning-chroma) * var(--ty-c-bg-base-mult))
484
- var(--ty-warning-hue)
485
- );
486
- --ty-bg-warning-bold: oklch(
487
- calc(var(--ty-l-bg-bold) * var(--ty-warning-l-factor))
488
- calc(var(--ty-warning-chroma) * var(--ty-c-bg-bold-mult))
489
- var(--ty-warning-hue)
490
- );
491
- --ty-bg-warning-soft: oklch(
492
- calc(var(--ty-l-bg-soft) * var(--ty-warning-l-factor))
493
- calc(var(--ty-warning-chroma) * var(--ty-c-bg-soft-mult))
494
- var(--ty-warning-hue)
495
- );
496
- --ty-border-warning: var(--ty-color-warning-soft);
497
-
498
- /* Neutral — same L curve, near-zero chroma so the grey scale stays grey. */
499
- --ty-color-neutral-strong: oklch(
500
- calc(var(--ty-l-strong) * var(--ty-neutral-l-factor))
501
- calc(var(--ty-neutral-chroma) * var(--ty-c-strong-mult))
502
- var(--ty-neutral-hue)
503
- );
504
- --ty-color-neutral-bold: oklch(
505
- calc(var(--ty-l-bold) * var(--ty-neutral-l-factor))
506
- calc(var(--ty-neutral-chroma) * var(--ty-c-bold-mult))
507
- var(--ty-neutral-hue)
508
- );
509
- --ty-color-neutral: oklch(
510
- calc(var(--ty-l-base) * var(--ty-neutral-l-factor))
511
- calc(var(--ty-neutral-chroma) * var(--ty-c-base-mult))
512
- var(--ty-neutral-hue)
513
- );
514
- --ty-color-neutral-soft: oklch(
515
- calc(var(--ty-l-soft) * var(--ty-neutral-l-factor))
516
- calc(var(--ty-neutral-chroma) * var(--ty-c-soft-mult))
517
- var(--ty-neutral-hue)
518
- );
519
- --ty-color-neutral-faint: oklch(
520
- calc(var(--ty-l-faint) * var(--ty-neutral-l-factor))
521
- calc(var(--ty-neutral-chroma) * var(--ty-c-faint-mult))
522
- var(--ty-neutral-hue)
523
- );
524
- --ty-bg-neutral: oklch(
525
- calc(var(--ty-l-bg-base) * var(--ty-neutral-l-factor))
526
- calc(var(--ty-neutral-chroma) * var(--ty-c-bg-base-mult))
527
- var(--ty-neutral-hue)
528
- );
529
- --ty-bg-neutral-bold: oklch(
530
- calc(var(--ty-l-bg-bold) * var(--ty-neutral-l-factor))
531
- calc(var(--ty-neutral-chroma) * var(--ty-c-bg-bold-mult))
532
- var(--ty-neutral-hue)
533
- );
534
- --ty-bg-neutral-soft: oklch(
535
- calc(var(--ty-l-bg-soft) * var(--ty-neutral-l-factor))
536
- calc(var(--ty-neutral-chroma) * var(--ty-c-bg-soft-mult))
537
- var(--ty-neutral-hue)
538
- );
539
- --ty-bg-neutral-strong: oklch(
540
- 0.25 calc(var(--ty-neutral-chroma) * 2) var(--ty-neutral-hue)
541
- );
542
- --ty-bg-neutral-faint: oklch(
543
- 0.99 calc(var(--ty-neutral-chroma) * 0.4) var(--ty-neutral-hue)
544
- );
545
-
546
- /* ----------------------------------------------------------------
547
- * Global neutral borders — read off the neutral color ramp.
548
- * --------------------------------------------------------------*/
549
- --ty-border-strong: var(--ty-color-neutral-bold);
550
- --ty-border: var(--ty-color-neutral-soft);
551
- --ty-border-bold: var(--ty-color-neutral-soft);
552
- --ty-border-soft: var(--ty-color-neutral-faint);
553
- --ty-border-faint: var(--ty-color-neutral-faint);
554
-
555
- /* ----------------------------------------------------------------
556
- * Surfaces — monochrome by default; --ty-surface-chroma warms them.
557
- * --------------------------------------------------------------*/
558
- --ty-surface-canvas: oklch(0.985 var(--ty-surface-chroma) var(--ty-brand-hue));
559
- --ty-surface-content: oklch(1 0 0);
560
- --ty-surface-elevated: oklch(1 0 0);
561
- --ty-surface-floating: oklch(1 0 0);
562
- --ty-surface-input: oklch(1 0 0);
563
-
564
- /* ----------------------------------------------------------------
565
- * Inputs — tied to neutral ramp so form controls retint with brand.
566
- * --------------------------------------------------------------*/
567
- --ty-input-bg: var(--ty-surface-input);
568
- --ty-input-color: var(--ty-color-neutral-strong);
569
- --ty-input-border: var(--ty-color-neutral-faint);
570
- --ty-input-border-hover: var(--ty-color-neutral-soft);
571
- --ty-input-border-focus: var(--ty-color-primary);
572
- --ty-input-placeholder: var(--ty-color-neutral-soft);
573
- --ty-input-disabled-bg: var(--ty-color-neutral-faint);
574
- --ty-input-disabled-border: var(--ty-color-neutral-faint);
575
- --ty-input-disabled-color: var(--ty-color-neutral-bold);
576
- --ty-input-shadow-focus: color-mix(
577
- in oklab,
578
- var(--ty-color-primary) 5%,
579
- transparent
580
- );
581
- }
582
-
583
- /* ----------------------------------------------------------------
584
- * Tier 6 — SOLID (implementation)
585
- * Solid is its OWN system, NOT the text/emphasis ramp. The dials
586
- * (--ty-solid-hover-l / -active-l / -strong-l / -soft-l and
587
- * --ty-solid-l / -c / -h) live in SECTION 1, Tier 6. Below is the
588
- * derivation only: base fill bakes in the per-theme adjust (Axis B);
589
- * hover/active/strong/soft offset the base by Axis A. Override any
590
- * single --ty-solid-{flavor}-{state} to recolor just that segment.
591
- *
592
- * Declared at `html:root` (specificity 0,1,1) — NOT plain `:root` (0,1,0) —
593
- * on purpose: it must out-rank tyrell.css's hardcoded dark solids at
594
- * `html.dark` (0,1,1). It wins light by specificity over base's `html{}`,
595
- * and wins dark by source order over base's `html.dark` (brand loads after).
596
- * That's what lets dark solids re-tint with --ty-brand-hue. Declared ONCE —
597
- * the oklch(from var(--ty-color-*)) formulas resolve per-mode automatically,
598
- * so no dark duplicate is needed.
599
- * --------------------------------------------------------------*/
600
- html:root {
601
- /* base fill per flavor (= flavor color, theme-adjusted by Axis B) */
602
- --ty-solid-primary: oklch(
603
- from var(--ty-color-primary) calc(l + var(--ty-solid-l))
604
- calc(c * var(--ty-solid-c)) calc(h + var(--ty-solid-h))
605
- );
606
- --ty-solid-secondary: oklch(
607
- from var(--ty-color-secondary) calc(l + var(--ty-solid-l))
608
- calc(c * var(--ty-solid-c)) calc(h + var(--ty-solid-h))
609
- );
610
- --ty-solid-success: oklch(
611
- from var(--ty-color-success) calc(l + var(--ty-solid-l))
612
- calc(c * var(--ty-solid-c)) calc(h + var(--ty-solid-h))
613
- );
614
- --ty-solid-danger: oklch(
615
- from var(--ty-color-danger) calc(l + var(--ty-solid-l))
616
- calc(c * var(--ty-solid-c)) calc(h + var(--ty-solid-h))
617
- );
618
- --ty-solid-warning: oklch(
619
- from var(--ty-color-warning) calc(l + var(--ty-solid-l))
620
- calc(c * var(--ty-solid-c)) calc(h + var(--ty-solid-h))
621
- );
622
- /* neutral is a deliberate dark grey fill, not the neutral text color */
623
- --ty-solid-neutral: oklch(
624
- 0.4 calc(var(--ty-neutral-chroma) * var(--ty-c-strong-mult))
625
- var(--ty-neutral-hue)
626
- );
627
-
628
- --ty-solid-primary-fg: white;
629
- --ty-solid-secondary-fg: white;
630
- --ty-solid-success-fg: white;
631
- --ty-solid-danger-fg: white;
632
- --ty-solid-warning-fg: white;
633
- --ty-solid-neutral-fg: white;
634
-
635
- /* derived states — axis 2 offsets on each base fill */
636
- --ty-solid-primary-hover: oklch(
637
- from var(--ty-solid-primary) calc(l + var(--ty-solid-hover-l)) c h
638
- );
639
- --ty-solid-primary-active: oklch(
640
- from var(--ty-solid-primary) calc(l + var(--ty-solid-active-l)) c h
641
- );
642
- --ty-solid-primary-strong: oklch(
643
- from var(--ty-solid-primary) calc(l + var(--ty-solid-strong-l)) c h
644
- );
645
- --ty-solid-primary-soft: oklch(
646
- from var(--ty-solid-primary) calc(l + var(--ty-solid-soft-l)) c h
647
- );
648
-
649
- --ty-solid-secondary-hover: oklch(
650
- from var(--ty-solid-secondary) calc(l + var(--ty-solid-hover-l)) c h
651
- );
652
- --ty-solid-secondary-active: oklch(
653
- from var(--ty-solid-secondary) calc(l + var(--ty-solid-active-l)) c h
654
- );
655
- --ty-solid-secondary-strong: oklch(
656
- from var(--ty-solid-secondary) calc(l + var(--ty-solid-strong-l)) c h
657
- );
658
- --ty-solid-secondary-soft: oklch(
659
- from var(--ty-solid-secondary) calc(l + var(--ty-solid-soft-l)) c h
660
- );
661
-
662
- --ty-solid-success-hover: oklch(
663
- from var(--ty-solid-success) calc(l + var(--ty-solid-hover-l)) c h
664
- );
665
- --ty-solid-success-active: oklch(
666
- from var(--ty-solid-success) calc(l + var(--ty-solid-active-l)) c h
667
- );
668
- --ty-solid-success-strong: oklch(
669
- from var(--ty-solid-success) calc(l + var(--ty-solid-strong-l)) c h
670
- );
671
- --ty-solid-success-soft: oklch(
672
- from var(--ty-solid-success) calc(l + var(--ty-solid-soft-l)) c h
673
- );
674
-
675
- --ty-solid-danger-hover: oklch(
676
- from var(--ty-solid-danger) calc(l + var(--ty-solid-hover-l)) c h
677
- );
678
- --ty-solid-danger-active: oklch(
679
- from var(--ty-solid-danger) calc(l + var(--ty-solid-active-l)) c h
680
- );
681
- --ty-solid-danger-strong: oklch(
682
- from var(--ty-solid-danger) calc(l + var(--ty-solid-strong-l)) c h
683
- );
684
- --ty-solid-danger-soft: oklch(
685
- from var(--ty-solid-danger) calc(l + var(--ty-solid-soft-l)) c h
686
- );
687
-
688
- --ty-solid-warning-hover: oklch(
689
- from var(--ty-solid-warning) calc(l + var(--ty-solid-hover-l)) c h
690
- );
691
- --ty-solid-warning-active: oklch(
692
- from var(--ty-solid-warning) calc(l + var(--ty-solid-active-l)) c h
693
- );
694
- --ty-solid-warning-strong: oklch(
695
- from var(--ty-solid-warning) calc(l + var(--ty-solid-strong-l)) c h
696
- );
697
- --ty-solid-warning-soft: oklch(
698
- from var(--ty-solid-warning) calc(l + var(--ty-solid-soft-l)) c h
699
- );
700
-
701
- --ty-solid-neutral-hover: oklch(
702
- from var(--ty-solid-neutral) calc(l + var(--ty-solid-hover-l)) c h
703
- );
704
- --ty-solid-neutral-active: oklch(
705
- from var(--ty-solid-neutral) calc(l + var(--ty-solid-active-l)) c h
706
- );
707
- --ty-solid-neutral-strong: oklch(
708
- from var(--ty-solid-neutral) calc(l + var(--ty-solid-strong-l)) c h
709
- );
710
- --ty-solid-neutral-soft: oklch(
711
- from var(--ty-solid-neutral) calc(l + var(--ty-solid-soft-l)) c h
712
- );
713
- }
714
-
715
- /* =====================================================================
716
- * SECTION 2 DARK — same computations re-declared so html.dark (0,1,1)
717
- * matches tyrell.css's hardcoded dark-mode hexes at source-order
718
- * specificity. The math is identical to the :root block above; only
719
- * the L/C inputs differ (from html.dark's Tier 3/4 overrides).
720
- * ===================================================================== */
721
-
722
- html.dark,
723
- html[data-theme="dark"] {
724
- /* Primary */
725
- --ty-color-primary-strong: oklch(
726
- calc(var(--ty-l-strong) * var(--ty-primary-l-factor))
727
- calc(var(--ty-brand-chroma) * var(--ty-c-strong-mult)) var(--ty-brand-hue)
728
- );
729
- --ty-color-primary-bold: oklch(
730
- calc(var(--ty-l-bold) * var(--ty-primary-l-factor))
731
- calc(var(--ty-brand-chroma) * var(--ty-c-bold-mult)) var(--ty-brand-hue)
732
- );
733
- --ty-color-primary: oklch(
734
- calc(var(--ty-l-base) * var(--ty-primary-l-factor))
735
- calc(var(--ty-brand-chroma) * var(--ty-c-base-mult)) var(--ty-brand-hue)
736
- );
737
- --ty-color-primary-soft: oklch(
738
- calc(var(--ty-l-soft) * var(--ty-primary-l-factor))
739
- calc(var(--ty-brand-chroma) * var(--ty-c-soft-mult)) var(--ty-brand-hue)
740
- );
741
- --ty-color-primary-faint: oklch(
742
- calc(var(--ty-l-faint) * var(--ty-primary-l-factor))
743
- calc(var(--ty-brand-chroma) * var(--ty-c-faint-mult)) var(--ty-brand-hue)
744
- );
745
- --ty-bg-primary: oklch(
746
- calc(var(--ty-l-bg-base) * var(--ty-primary-l-factor))
747
- calc(var(--ty-brand-chroma) * var(--ty-c-bg-base-mult))
748
- var(--ty-brand-hue)
749
- );
750
- --ty-bg-primary-bold: oklch(
751
- calc(var(--ty-l-bg-bold) * var(--ty-primary-l-factor))
752
- calc(var(--ty-brand-chroma) * var(--ty-c-bg-bold-mult))
753
- var(--ty-brand-hue)
754
- );
755
- --ty-bg-primary-soft: oklch(
756
- calc(var(--ty-l-bg-soft) * var(--ty-primary-l-factor))
757
- calc(var(--ty-brand-chroma) * var(--ty-c-bg-soft-mult))
758
- var(--ty-brand-hue)
759
- );
760
- --ty-border-primary: var(--ty-color-primary-soft);
761
-
762
- /* Secondary */
763
- --ty-color-secondary-strong: oklch(
764
- calc(var(--ty-l-strong) * var(--ty-secondary-l-factor))
765
- calc(var(--ty-secondary-chroma) * var(--ty-c-strong-mult))
766
- var(--ty-secondary-hue)
767
- );
768
- --ty-color-secondary-bold: oklch(
769
- calc(var(--ty-l-bold) * var(--ty-secondary-l-factor))
770
- calc(var(--ty-secondary-chroma) * var(--ty-c-bold-mult))
771
- var(--ty-secondary-hue)
772
- );
773
- --ty-color-secondary: oklch(
774
- calc(var(--ty-l-base) * var(--ty-secondary-l-factor))
775
- calc(var(--ty-secondary-chroma) * var(--ty-c-base-mult))
776
- var(--ty-secondary-hue)
777
- );
778
- --ty-color-secondary-soft: oklch(
779
- calc(var(--ty-l-soft) * var(--ty-secondary-l-factor))
780
- calc(var(--ty-secondary-chroma) * var(--ty-c-soft-mult))
781
- var(--ty-secondary-hue)
782
- );
783
- --ty-color-secondary-faint: oklch(
784
- calc(var(--ty-l-faint) * var(--ty-secondary-l-factor))
785
- calc(var(--ty-secondary-chroma) * var(--ty-c-faint-mult))
786
- var(--ty-secondary-hue)
787
- );
788
- --ty-bg-secondary: oklch(
789
- calc(var(--ty-l-bg-base) * var(--ty-secondary-l-factor))
790
- calc(var(--ty-secondary-chroma) * var(--ty-c-bg-base-mult))
791
- var(--ty-secondary-hue)
792
- );
793
- --ty-bg-secondary-bold: oklch(
794
- calc(var(--ty-l-bg-bold) * var(--ty-secondary-l-factor))
795
- calc(var(--ty-secondary-chroma) * var(--ty-c-bg-bold-mult))
796
- var(--ty-secondary-hue)
797
- );
798
- --ty-bg-secondary-soft: oklch(
799
- calc(var(--ty-l-bg-soft) * var(--ty-secondary-l-factor))
800
- calc(var(--ty-secondary-chroma) * var(--ty-c-bg-soft-mult))
801
- var(--ty-secondary-hue)
802
- );
803
- --ty-border-secondary: var(--ty-color-secondary-soft);
804
-
805
- /* Success */
806
- --ty-color-success-strong: oklch(
807
- calc(var(--ty-l-strong) * var(--ty-success-l-factor))
808
- calc(var(--ty-success-chroma) * var(--ty-c-strong-mult))
809
- var(--ty-success-hue)
810
- );
811
- --ty-color-success-bold: oklch(
812
- calc(var(--ty-l-bold) * var(--ty-success-l-factor))
813
- calc(var(--ty-success-chroma) * var(--ty-c-bold-mult))
814
- var(--ty-success-hue)
815
- );
816
- --ty-color-success: oklch(
817
- calc(var(--ty-l-base) * var(--ty-success-l-factor))
818
- calc(var(--ty-success-chroma) * var(--ty-c-base-mult))
819
- var(--ty-success-hue)
820
- );
821
- --ty-color-success-soft: oklch(
822
- calc(var(--ty-l-soft) * var(--ty-success-l-factor))
823
- calc(var(--ty-success-chroma) * var(--ty-c-soft-mult))
824
- var(--ty-success-hue)
825
- );
826
- --ty-color-success-faint: oklch(
827
- calc(var(--ty-l-faint) * var(--ty-success-l-factor))
828
- calc(var(--ty-success-chroma) * var(--ty-c-faint-mult))
829
- var(--ty-success-hue)
830
- );
831
- --ty-bg-success: oklch(
832
- calc(var(--ty-l-bg-base) * var(--ty-success-l-factor))
833
- calc(var(--ty-success-chroma) * var(--ty-c-bg-base-mult))
834
- var(--ty-success-hue)
835
- );
836
- --ty-bg-success-bold: oklch(
837
- calc(var(--ty-l-bg-bold) * var(--ty-success-l-factor))
838
- calc(var(--ty-success-chroma) * var(--ty-c-bg-bold-mult))
839
- var(--ty-success-hue)
840
- );
841
- --ty-bg-success-soft: oklch(
842
- calc(var(--ty-l-bg-soft) * var(--ty-success-l-factor))
843
- calc(var(--ty-success-chroma) * var(--ty-c-bg-soft-mult))
844
- var(--ty-success-hue)
845
- );
846
- --ty-border-success: var(--ty-color-success-soft);
847
-
848
- /* Danger */
849
- --ty-color-danger-strong: oklch(
850
- calc(var(--ty-l-strong) * var(--ty-danger-l-factor))
851
- calc(var(--ty-danger-chroma) * var(--ty-c-strong-mult))
852
- var(--ty-danger-hue)
853
- );
854
- --ty-color-danger-bold: oklch(
855
- calc(var(--ty-l-bold) * var(--ty-danger-l-factor))
856
- calc(var(--ty-danger-chroma) * var(--ty-c-bold-mult)) var(--ty-danger-hue)
857
- );
858
- --ty-color-danger: oklch(
859
- calc(var(--ty-l-base) * var(--ty-danger-l-factor))
860
- calc(var(--ty-danger-chroma) * var(--ty-c-base-mult)) var(--ty-danger-hue)
861
- );
862
- --ty-color-danger-soft: oklch(
863
- calc(var(--ty-l-soft) * var(--ty-danger-l-factor))
864
- calc(var(--ty-danger-chroma) * var(--ty-c-soft-mult)) var(--ty-danger-hue)
865
- );
866
- --ty-color-danger-faint: oklch(
867
- calc(var(--ty-l-faint) * var(--ty-danger-l-factor))
868
- calc(var(--ty-danger-chroma) * var(--ty-c-faint-mult))
869
- var(--ty-danger-hue)
870
- );
871
- --ty-bg-danger: oklch(
872
- calc(var(--ty-l-bg-base) * var(--ty-danger-l-factor))
873
- calc(var(--ty-danger-chroma) * var(--ty-c-bg-base-mult))
874
- var(--ty-danger-hue)
875
- );
876
- --ty-bg-danger-bold: oklch(
877
- calc(var(--ty-l-bg-bold) * var(--ty-danger-l-factor))
878
- calc(var(--ty-danger-chroma) * var(--ty-c-bg-bold-mult))
879
- var(--ty-danger-hue)
880
- );
881
- --ty-bg-danger-soft: oklch(
882
- calc(var(--ty-l-bg-soft) * var(--ty-danger-l-factor))
883
- calc(var(--ty-danger-chroma) * var(--ty-c-bg-soft-mult))
884
- var(--ty-danger-hue)
885
- );
886
- --ty-border-danger: var(--ty-color-danger-soft);
887
-
888
- /* Warning */
889
- --ty-color-warning-strong: oklch(
890
- calc(var(--ty-l-strong) * var(--ty-warning-l-factor))
891
- calc(var(--ty-warning-chroma) * var(--ty-c-strong-mult))
892
- var(--ty-warning-hue)
893
- );
894
- --ty-color-warning-bold: oklch(
895
- calc(var(--ty-l-bold) * var(--ty-warning-l-factor))
896
- calc(var(--ty-warning-chroma) * var(--ty-c-bold-mult))
897
- var(--ty-warning-hue)
898
- );
899
- --ty-color-warning: oklch(
900
- calc(var(--ty-l-base) * var(--ty-warning-l-factor))
901
- calc(var(--ty-warning-chroma) * var(--ty-c-base-mult))
902
- var(--ty-warning-hue)
903
- );
904
- --ty-color-warning-soft: oklch(
905
- calc(var(--ty-l-soft) * var(--ty-warning-l-factor))
906
- calc(var(--ty-warning-chroma) * var(--ty-c-soft-mult))
907
- var(--ty-warning-hue)
908
- );
909
- --ty-color-warning-faint: oklch(
910
- calc(var(--ty-l-faint) * var(--ty-warning-l-factor))
911
- calc(var(--ty-warning-chroma) * var(--ty-c-faint-mult))
912
- var(--ty-warning-hue)
913
- );
914
- --ty-bg-warning: oklch(
915
- calc(var(--ty-l-bg-base) * var(--ty-warning-l-factor))
916
- calc(var(--ty-warning-chroma) * var(--ty-c-bg-base-mult))
917
- var(--ty-warning-hue)
918
- );
919
- --ty-bg-warning-bold: oklch(
920
- calc(var(--ty-l-bg-bold) * var(--ty-warning-l-factor))
921
- calc(var(--ty-warning-chroma) * var(--ty-c-bg-bold-mult))
922
- var(--ty-warning-hue)
923
- );
924
- --ty-bg-warning-soft: oklch(
925
- calc(var(--ty-l-bg-soft) * var(--ty-warning-l-factor))
926
- calc(var(--ty-warning-chroma) * var(--ty-c-bg-soft-mult))
927
- var(--ty-warning-hue)
928
- );
929
- --ty-border-warning: var(--ty-color-warning-soft);
930
-
931
- /* Neutral */
932
- --ty-color-neutral-strong: oklch(
933
- calc(var(--ty-l-strong) * var(--ty-neutral-l-factor))
934
- calc(var(--ty-neutral-chroma) * var(--ty-c-strong-mult))
935
- var(--ty-neutral-hue)
936
- );
937
- --ty-color-neutral-bold: oklch(
938
- calc(var(--ty-l-bold) * var(--ty-neutral-l-factor))
939
- calc(var(--ty-neutral-chroma) * var(--ty-c-bold-mult))
940
- var(--ty-neutral-hue)
941
- );
942
- --ty-color-neutral: oklch(
943
- calc(var(--ty-l-base) * var(--ty-neutral-l-factor))
944
- calc(var(--ty-neutral-chroma) * var(--ty-c-base-mult))
945
- var(--ty-neutral-hue)
946
- );
947
- --ty-color-neutral-soft: oklch(
948
- calc(var(--ty-l-soft) * var(--ty-neutral-l-factor))
949
- calc(var(--ty-neutral-chroma) * var(--ty-c-soft-mult))
950
- var(--ty-neutral-hue)
951
- );
952
- --ty-color-neutral-faint: oklch(
953
- calc(var(--ty-l-faint) * var(--ty-neutral-l-factor))
954
- calc(var(--ty-neutral-chroma) * var(--ty-c-faint-mult))
955
- var(--ty-neutral-hue)
956
- );
957
- --ty-bg-neutral: oklch(
958
- calc(var(--ty-l-bg-base) * var(--ty-neutral-l-factor))
959
- calc(var(--ty-neutral-chroma) * var(--ty-c-bg-base-mult))
960
- var(--ty-neutral-hue)
961
- );
962
- --ty-bg-neutral-bold: oklch(
963
- calc(var(--ty-l-bg-bold) * var(--ty-neutral-l-factor))
964
- calc(var(--ty-neutral-chroma) * var(--ty-c-bg-bold-mult))
965
- var(--ty-neutral-hue)
966
- );
967
- --ty-bg-neutral-soft: oklch(
968
- calc(var(--ty-l-bg-soft) * var(--ty-neutral-l-factor))
969
- calc(var(--ty-neutral-chroma) * var(--ty-c-bg-soft-mult))
970
- var(--ty-neutral-hue)
971
- );
972
- --ty-bg-neutral-strong: oklch(
973
- 0.95 calc(var(--ty-neutral-chroma) * 2) var(--ty-neutral-hue)
974
- );
975
- --ty-bg-neutral-faint: oklch(
976
- 0.15 calc(var(--ty-neutral-chroma) * 2) var(--ty-neutral-hue)
977
- );
978
-
979
- /* Global neutral borders */
980
- --ty-border-strong: var(--ty-color-neutral-bold);
981
- --ty-border: var(--ty-color-neutral-soft);
982
- --ty-border-bold: var(--ty-color-neutral-soft);
983
- --ty-border-soft: var(--ty-color-neutral-faint);
984
- --ty-border-faint: var(--ty-color-neutral-faint);
985
-
986
- /* Surfaces — monochrome by default; --ty-surface-chroma warms them. */
987
- --ty-surface-canvas: oklch(0.12 var(--ty-surface-chroma) var(--ty-brand-hue));
988
- --ty-surface-content: oklch(0.16 var(--ty-surface-chroma) var(--ty-brand-hue));
989
- --ty-surface-elevated: oklch(0.19 var(--ty-surface-chroma) var(--ty-brand-hue));
990
- --ty-surface-floating: oklch(0.22 var(--ty-surface-chroma) var(--ty-brand-hue));
991
- --ty-surface-input: oklch(0.18 var(--ty-surface-chroma) var(--ty-brand-hue));
992
-
993
- /* Inputs — re-declared at html.dark specificity. */
994
- --ty-input-bg: var(--ty-surface-input);
995
- --ty-input-color: var(--ty-color-neutral-strong);
996
- --ty-input-border: var(--ty-color-neutral-faint);
997
- --ty-input-border-hover: var(--ty-color-neutral-soft);
998
- --ty-input-border-focus: var(--ty-color-primary);
999
- --ty-input-placeholder: var(--ty-color-neutral-soft);
1000
- --ty-input-disabled-bg: var(--ty-color-neutral-faint);
1001
- --ty-input-disabled-border: var(--ty-color-neutral-faint);
1002
- --ty-input-disabled-color: var(--ty-color-neutral-bold);
1003
- --ty-input-shadow-focus: color-mix(
1004
- in oklab,
1005
- var(--ty-color-primary) 20%,
1006
- transparent
1007
- );
1008
-
1009
- /* Tier 6 dark — solid dials live in SECTION 1's html.dark block.
1010
- * neutral is hand-pinned (it ignores Axis B); dim it per theme here. */
1011
- --ty-solid-neutral: oklch(
1012
- 0.3 calc(var(--ty-neutral-chroma) * var(--ty-c-strong-mult))
1013
- var(--ty-neutral-hue)
1014
- );
1015
- }