tyrell-components 1.0.0-TC35 → 1.0.0-TC37

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.
@@ -24,7 +24,7 @@
24
24
  * H = flavor-hue ← Tier 2
25
25
  * )
26
26
  *
27
- * Pick a flavor (primary / secondary / success / warning / danger /
27
+ * Pick a flavor (primary / success / warning / danger /
28
28
  * neutral). Pick a shade (strong / bold / base / soft / faint). That's
29
29
  * the cell; the formula gives you its color.
30
30
  *
@@ -103,11 +103,6 @@
103
103
  * Bump to ~0.005 (light) / ~0.012 (dark) to warm surfaces toward brand. */
104
104
  --ty-surface-chroma: 0;
105
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
106
 
112
107
  /* ----------------------------------------------------------------
113
108
  * Tier 2 — PER-FLAVOR ANCHORS
@@ -118,8 +113,6 @@
118
113
  * --ty-warning-chroma: 0.2; (more vivid)
119
114
  * --------------------------------------------------------------*/
120
115
 
121
- --ty-secondary-hue: calc(var(--ty-brand-hue) + var(--ty-secondary-offset));
122
- --ty-secondary-chroma: var(--ty-brand-chroma);
123
116
 
124
117
  --ty-success-hue: 145;
125
118
  --ty-success-chroma: calc(var(--ty-brand-chroma) * 1.08);
@@ -130,8 +123,13 @@
130
123
  --ty-danger-hue: 25;
131
124
  --ty-danger-chroma: calc(var(--ty-brand-chroma) * 1.31);
132
125
 
133
- --ty-neutral-hue: var(--ty-brand-hue);
134
- --ty-neutral-chroma: calc(var(--ty-brand-chroma) * 0.04);
126
+ /* Neutral is ACHROMATIC by default — greys do not follow the brand.
127
+ * Most of an interface is monochrome; a rebrand should not drift it.
128
+ * To warm greys toward the brand (the pre-2026-08 behavior), opt in:
129
+ * --ty-neutral-hue: var(--ty-brand-hue);
130
+ * --ty-neutral-chroma: calc(var(--ty-brand-chroma) * 0.04); */
131
+ --ty-neutral-hue: 0;
132
+ --ty-neutral-chroma: 0;
135
133
 
136
134
  /* ----------------------------------------------------------------
137
135
  * Tier 3 — L-CURVE (light mode)
@@ -150,6 +148,51 @@
150
148
  --ty-l-bg-bold: 0.92;
151
149
  --ty-l-bg-soft: 0.98;
152
150
 
151
+ /* Text ladder (--ty-text-*) and surface borders — historically
152
+ * hardcoded hexes in tyrell.css that a rebrand never touched; now
153
+ * engine-wired at the SAME lightness the hexes had (measured via
154
+ * oklch(from #hex l c h)), tinted by the neutral seeds. At the
155
+ * default --ty-neutral-chroma (≈0.005) the tint is imperceptible. */
156
+ --ty-l-text-strong: 0; /* was #000 */
157
+ --ty-l-text-bold: 0; /* was #000 */
158
+ --ty-l-text-base: 0.21; /* was #111827 */
159
+ --ty-l-text-soft: 0.37; /* was #374151 */
160
+ --ty-l-text-faint: 0.71; /* was #9ca3af */
161
+
162
+ --ty-l-border-content: 0.93; /* was #e5e7eb */
163
+ --ty-l-border-elevated: 0.93;
164
+ --ty-l-border-floating: 0.93;
165
+
166
+ /* Generic border ladder — borders are their OWN family, not ink.
167
+ * Historically --ty-border-* aliased the neutral text ramp; that tied
168
+ * app chrome to the text emphasis curve (and to --ty-neutral-l-factor),
169
+ * so tuning text moved every border. Defaults preserve the exact L the
170
+ * aliases produced. Borders sit relative to the surfaces they separate;
171
+ * tune them here without touching text. */
172
+ --ty-l-border-strong: 0.46; /* was color-neutral-bold */
173
+ --ty-l-border-bold: 0.64;
174
+ --ty-l-border: 0.76; /* was color-neutral-soft */
175
+ --ty-l-border-soft: 0.88; /* was color-neutral-faint */
176
+ --ty-l-border-faint: 0.92;
177
+
178
+ /* Surface ladder + remaining per-mode absolutes, as L dials. These were
179
+ * whole oklch() declarations swapped per mode; as numeric dials they are
180
+ * (a) consistent with every other family and (b) interpolable — which is
181
+ * what lets theme/mode switches ANIMATE (see THEME TRANSITIONS at the
182
+ * end of this file). */
183
+ --ty-l-surface-canvas: 0.985;
184
+ --ty-l-surface-content: 1;
185
+ --ty-l-surface-elevated: 1;
186
+ --ty-l-surface-floating: 1;
187
+ --ty-l-surface-input: 1;
188
+
189
+ --ty-l-solid-neutral: 0.4; /* the neutral "ink" fill — dark in BOTH modes */
190
+ --ty-l-bg-neutral-strong: 0.25; /* opposes the mode: dark bg on light page */
191
+ --ty-l-bg-neutral-faint: 0.99; /* follows the mode */
192
+ --ty-c-bg-neutral-faint-mult: 0.4;
193
+
194
+ --ty-focus-ring-alpha: 5%; /* focus ring mix strength (dark needs more) */
195
+
153
196
  /* ----------------------------------------------------------------
154
197
  * Tier 4 — SATURATION CURVE
155
198
  * Per-shade chroma multipliers. Each shade's chroma =
@@ -185,7 +228,6 @@
185
228
  * --------------------------------------------------------------*/
186
229
 
187
230
  --ty-primary-l-factor: 1;
188
- --ty-secondary-l-factor: 1;
189
231
  --ty-success-l-factor: 1;
190
232
  --ty-warning-l-factor: 1.15;
191
233
  --ty-danger-l-factor: 1;
@@ -222,7 +264,9 @@
222
264
  /* Dark mode overrides for the L-curve and saturation curve. Tier 1 + 2
223
265
  * seeds and Tier 5 L-factors carry through unchanged from :root. */
224
266
  html.dark,
225
- html[data-theme="dark"] {
267
+ html[data-theme="dark"],
268
+ [data-ty-theme].dark,
269
+ [data-ty-theme][data-theme="dark"] {
226
270
  /* Tier 3 dark — inverted curve. Higher L = lighter text = more
227
271
  * emphasis on a dark background. */
228
272
  --ty-l-strong: 0.72;
@@ -235,6 +279,42 @@ html[data-theme="dark"] {
235
279
  --ty-l-bg-bold: 0.26;
236
280
  --ty-l-bg-soft: 0.19;
237
281
 
282
+ /* Text ladder + surface borders dark — L matched to the hexes
283
+ * tyrell.css used to hardcode (#fff/#f9fafb/#d6d6d6/#7f8590/#555a63,
284
+ * borders #030712/#414141/#494949). */
285
+ --ty-l-text-strong: 1;
286
+ --ty-l-text-bold: 0.985;
287
+ --ty-l-text-base: 0.88;
288
+ --ty-l-text-soft: 0.62;
289
+ --ty-l-text-faint: 0.47;
290
+
291
+ --ty-l-border-content: 0.13;
292
+ --ty-l-border-elevated: 0.375;
293
+ --ty-l-border-floating: 0.41;
294
+
295
+ --ty-l-border-strong: 0.66;
296
+ --ty-l-border-bold: 0.46;
297
+ --ty-l-border: 0.38;
298
+ --ty-l-border-soft: 0.3;
299
+ --ty-l-border-faint: 0.3;
300
+
301
+ /* Surface ladder + absolutes dark — hand-tuned values, now as dials. */
302
+ --ty-l-surface-canvas: 0.12;
303
+ --ty-l-surface-content: 0.16;
304
+ --ty-l-surface-elevated: 0.19;
305
+ --ty-l-surface-floating: 0.22;
306
+ --ty-l-surface-input: 0.18;
307
+
308
+ --ty-l-solid-neutral: 0.23;
309
+ --ty-l-bg-neutral-strong: 0.95;
310
+ --ty-l-bg-neutral-faint: 0.15;
311
+ --ty-c-bg-neutral-faint-mult: 2;
312
+
313
+ /* Tier 5 dark — neutral inks pulled down a notch against dark surfaces. */
314
+ --ty-neutral-l-factor: 0.8;
315
+
316
+ --ty-focus-ring-alpha: 20%;
317
+
238
318
  /* Tier 4 dark — dim shades hold more chroma so they don't grey out;
239
319
  * strong shades trim chroma so bright tones don't over-pop. */
240
320
  --ty-c-strong-mult: 0.77;
@@ -249,14 +329,14 @@ html[data-theme="dark"] {
249
329
 
250
330
  /* Tier 6 dark — interaction offsets flip sign (press LIGHTENS on dark),
251
331
  * and the per-theme adjust dims + desaturates the fills against the
252
- * dark canvas. (Computed solid tokens live in SECTION 2 DARK.) */
332
+ * dark canvas. (Computed solid tokens are declared once at html:root.) */
253
333
  --ty-solid-hover-l: 0.04; /* :hover */
254
334
  --ty-solid-active-l: 0.08; /* :active */
255
335
  --ty-solid-strong-l: 0.06; /* tone+ */
256
336
  --ty-solid-soft-l: -0.1; /* tone- */
257
337
 
258
- --ty-solid-l: -0.25; /* dim against dark canvas */
259
- --ty-solid-c: 0.65; /* desaturate against dark canvas */
338
+ --ty-solid-l: -0.2; /* dim against dark canvas */
339
+ --ty-solid-c: 0.7; /* desaturate against dark canvas */
260
340
  --ty-solid-h: 0; /* hue offset */
261
341
  }
262
342
 
@@ -276,290 +356,360 @@ html[data-theme="dark"] {
276
356
  * var(--ty-{flavor}-hue) ← H
277
357
  * );
278
358
  *
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.
359
+ * Formulas are declared ONCE, at `html:root` (specificity 0,1,1 — NOT
360
+ * plain `:root` (0,1,0)): they out-rank tyrell.css's hardcoded light
361
+ * tokens by specificity and its hardcoded `html.dark` hexes (0,1,1) by
362
+ * source order, since the brand layer loads after. Dark mode needs no
363
+ * formula duplicates — the dials they read (Tier 3/4, SECTION 1) are
364
+ * what flip per mode. The `html.dark` block at the END of this file
365
+ * holds only genuine per-mode DATA (surface ladder, hand-pinned
366
+ * absolutes) — never formulas. If you add a token here, do NOT mirror
367
+ * it there unless its VALUE is mode-specific.
284
368
  * ===================================================================== */
285
369
 
286
- :root {
370
+ html:root,
371
+ [data-ty-theme] {
287
372
  /* ----------------------------------------------------------------
288
373
  * Flavor color ramps (fg + bg + border)
374
+ *
375
+ * SEED INGESTION — every flavor resolves ONE seed color, and every
376
+ * ramp formula reads that seed's c + h channels via relative color
377
+ * syntax; L always comes from the mode-flipped curve. Two ways in:
378
+ *
379
+ * numbers (default) — the Tier 1/2 hue+chroma dials construct the
380
+ * seed: --ty-brand-hue: 200; --ty-brand-chroma: 0.13;
381
+ *
382
+ * a color — set the seed directly and the dials are bypassed:
383
+ * --ty-primary-seed: #76467c;
384
+ * --ty-danger-seed: crimson;
385
+ *
386
+ * The seed's LIGHTNESS is discarded by design: a color's identity
387
+ * here is hue + chroma; where each shade sits per mode is the
388
+ * L-curve's job. That is what makes dark mode, tones and contrast
389
+ * correct for ANY seed — light or dark. (Your exact pixel may
390
+ * appear nowhere; pin --ty-solid-X etc. if you need it literally.)
289
391
  * --------------------------------------------------------------*/
392
+ --ty-primary-seed-resolved: var(
393
+ --ty-primary-seed,
394
+ oklch(0.5 var(--ty-brand-chroma) var(--ty-brand-hue))
395
+ );
396
+ --ty-success-seed-resolved: var(
397
+ --ty-success-seed,
398
+ oklch(0.5 var(--ty-success-chroma) var(--ty-success-hue))
399
+ );
400
+ --ty-warning-seed-resolved: var(
401
+ --ty-warning-seed,
402
+ oklch(0.5 var(--ty-warning-chroma) var(--ty-warning-hue))
403
+ );
404
+ --ty-danger-seed-resolved: var(
405
+ --ty-danger-seed,
406
+ oklch(0.5 var(--ty-danger-chroma) var(--ty-danger-hue))
407
+ );
408
+ --ty-neutral-seed-resolved: var(
409
+ --ty-neutral-seed,
410
+ oklch(0.5 var(--ty-neutral-chroma) var(--ty-neutral-hue))
411
+ );
290
412
 
291
413
  /* Primary */
292
414
  --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)
415
+ from var(--ty-primary-seed-resolved)
416
+ calc(var(--ty-l-strong) * var(--ty-primary-l-factor))
417
+ calc(c * var(--ty-c-strong-mult)) h
295
418
  );
296
419
  --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)
420
+ from var(--ty-primary-seed-resolved)
421
+ calc(var(--ty-l-bold) * var(--ty-primary-l-factor))
422
+ calc(c * var(--ty-c-bold-mult)) h
299
423
  );
300
424
  --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)
425
+ from var(--ty-primary-seed-resolved)
426
+ calc(var(--ty-l-base) * var(--ty-primary-l-factor))
427
+ calc(c * var(--ty-c-base-mult)) h
303
428
  );
304
429
  --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)
430
+ from var(--ty-primary-seed-resolved)
431
+ calc(var(--ty-l-soft) * var(--ty-primary-l-factor))
432
+ calc(c * var(--ty-c-soft-mult)) h
307
433
  );
308
434
  --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)
435
+ from var(--ty-primary-seed-resolved)
436
+ calc(var(--ty-l-faint) * var(--ty-primary-l-factor))
437
+ calc(c * var(--ty-c-faint-mult)) h
311
438
  );
312
439
  --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)
440
+ from var(--ty-primary-seed-resolved)
441
+ calc(var(--ty-l-bg-base) * var(--ty-primary-l-factor))
442
+ calc(c * var(--ty-c-bg-base-mult)) h
316
443
  );
317
444
  --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)
445
+ from var(--ty-primary-seed-resolved)
446
+ calc(var(--ty-l-bg-bold) * var(--ty-primary-l-factor))
447
+ calc(c * var(--ty-c-bg-bold-mult)) h
321
448
  );
322
449
  --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)
450
+ from var(--ty-primary-seed-resolved)
451
+ calc(var(--ty-l-bg-soft) * var(--ty-primary-l-factor))
452
+ calc(c * var(--ty-c-bg-soft-mult)) h
326
453
  );
327
454
  --ty-border-primary: var(--ty-color-primary-soft);
328
455
 
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
456
  /* Success */
373
457
  --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)
458
+ from var(--ty-success-seed-resolved)
459
+ calc(var(--ty-l-strong) * var(--ty-success-l-factor))
460
+ calc(c * var(--ty-c-strong-mult)) h
377
461
  );
378
462
  --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)
463
+ from var(--ty-success-seed-resolved)
464
+ calc(var(--ty-l-bold) * var(--ty-success-l-factor))
465
+ calc(c * var(--ty-c-bold-mult)) h
382
466
  );
383
467
  --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)
468
+ from var(--ty-success-seed-resolved)
469
+ calc(var(--ty-l-base) * var(--ty-success-l-factor))
470
+ calc(c * var(--ty-c-base-mult)) h
387
471
  );
388
472
  --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)
473
+ from var(--ty-success-seed-resolved)
474
+ calc(var(--ty-l-soft) * var(--ty-success-l-factor))
475
+ calc(c * var(--ty-c-soft-mult)) h
392
476
  );
393
477
  --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)
478
+ from var(--ty-success-seed-resolved)
479
+ calc(var(--ty-l-faint) * var(--ty-success-l-factor))
480
+ calc(c * var(--ty-c-faint-mult)) h
397
481
  );
398
482
  --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)
483
+ from var(--ty-success-seed-resolved)
484
+ calc(var(--ty-l-bg-base) * var(--ty-success-l-factor))
485
+ calc(c * var(--ty-c-bg-base-mult)) h
402
486
  );
403
487
  --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)
488
+ from var(--ty-success-seed-resolved)
489
+ calc(var(--ty-l-bg-bold) * var(--ty-success-l-factor))
490
+ calc(c * var(--ty-c-bg-bold-mult)) h
407
491
  );
408
492
  --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)
493
+ from var(--ty-success-seed-resolved)
494
+ calc(var(--ty-l-bg-soft) * var(--ty-success-l-factor))
495
+ calc(c * var(--ty-c-bg-soft-mult)) h
412
496
  );
413
497
  --ty-border-success: var(--ty-color-success-soft);
414
498
 
415
499
  /* Danger */
416
500
  --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)
501
+ from var(--ty-danger-seed-resolved)
502
+ calc(var(--ty-l-strong) * var(--ty-danger-l-factor))
503
+ calc(c * var(--ty-c-strong-mult)) h
420
504
  );
421
505
  --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)
506
+ from var(--ty-danger-seed-resolved)
507
+ calc(var(--ty-l-bold) * var(--ty-danger-l-factor))
508
+ calc(c * var(--ty-c-bold-mult)) h
424
509
  );
425
510
  --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)
511
+ from var(--ty-danger-seed-resolved)
512
+ calc(var(--ty-l-base) * var(--ty-danger-l-factor))
513
+ calc(c * var(--ty-c-base-mult)) h
428
514
  );
429
515
  --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)
516
+ from var(--ty-danger-seed-resolved)
517
+ calc(var(--ty-l-soft) * var(--ty-danger-l-factor))
518
+ calc(c * var(--ty-c-soft-mult)) h
432
519
  );
433
520
  --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)
521
+ from var(--ty-danger-seed-resolved)
522
+ calc(var(--ty-l-faint) * var(--ty-danger-l-factor))
523
+ calc(c * var(--ty-c-faint-mult)) h
437
524
  );
438
525
  --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)
526
+ from var(--ty-danger-seed-resolved)
527
+ calc(var(--ty-l-bg-base) * var(--ty-danger-l-factor))
528
+ calc(c * var(--ty-c-bg-base-mult)) h
442
529
  );
443
530
  --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)
531
+ from var(--ty-danger-seed-resolved)
532
+ calc(var(--ty-l-bg-bold) * var(--ty-danger-l-factor))
533
+ calc(c * var(--ty-c-bg-bold-mult)) h
447
534
  );
448
535
  --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)
536
+ from var(--ty-danger-seed-resolved)
537
+ calc(var(--ty-l-bg-soft) * var(--ty-danger-l-factor))
538
+ calc(c * var(--ty-c-bg-soft-mult)) h
452
539
  );
453
540
  --ty-border-danger: var(--ty-color-danger-soft);
454
541
 
455
542
  /* Warning */
456
543
  --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)
544
+ from var(--ty-warning-seed-resolved)
545
+ calc(var(--ty-l-strong) * var(--ty-warning-l-factor))
546
+ calc(c * var(--ty-c-strong-mult)) h
460
547
  );
461
548
  --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)
549
+ from var(--ty-warning-seed-resolved)
550
+ calc(var(--ty-l-bold) * var(--ty-warning-l-factor))
551
+ calc(c * var(--ty-c-bold-mult)) h
465
552
  );
466
553
  --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)
554
+ from var(--ty-warning-seed-resolved)
555
+ calc(var(--ty-l-base) * var(--ty-warning-l-factor))
556
+ calc(c * var(--ty-c-base-mult)) h
470
557
  );
471
558
  --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)
559
+ from var(--ty-warning-seed-resolved)
560
+ calc(var(--ty-l-soft) * var(--ty-warning-l-factor))
561
+ calc(c * var(--ty-c-soft-mult)) h
475
562
  );
476
563
  --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)
564
+ from var(--ty-warning-seed-resolved)
565
+ calc(var(--ty-l-faint) * var(--ty-warning-l-factor))
566
+ calc(c * var(--ty-c-faint-mult)) h
480
567
  );
481
568
  --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)
569
+ from var(--ty-warning-seed-resolved)
570
+ calc(var(--ty-l-bg-base) * var(--ty-warning-l-factor))
571
+ calc(c * var(--ty-c-bg-base-mult)) h
485
572
  );
486
573
  --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)
574
+ from var(--ty-warning-seed-resolved)
575
+ calc(var(--ty-l-bg-bold) * var(--ty-warning-l-factor))
576
+ calc(c * var(--ty-c-bg-bold-mult)) h
490
577
  );
491
578
  --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)
579
+ from var(--ty-warning-seed-resolved)
580
+ calc(var(--ty-l-bg-soft) * var(--ty-warning-l-factor))
581
+ calc(c * var(--ty-c-bg-soft-mult)) h
495
582
  );
496
583
  --ty-border-warning: var(--ty-color-warning-soft);
497
584
 
498
585
  /* Neutral — same L curve, near-zero chroma so the grey scale stays grey. */
499
586
  --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)
587
+ from var(--ty-neutral-seed-resolved)
588
+ calc(var(--ty-l-strong) * var(--ty-neutral-l-factor))
589
+ calc(c * var(--ty-c-strong-mult)) h
503
590
  );
504
591
  --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)
592
+ from var(--ty-neutral-seed-resolved)
593
+ calc(var(--ty-l-bold) * var(--ty-neutral-l-factor))
594
+ calc(c * var(--ty-c-bold-mult)) h
508
595
  );
509
596
  --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)
597
+ from var(--ty-neutral-seed-resolved)
598
+ calc(var(--ty-l-base) * var(--ty-neutral-l-factor))
599
+ calc(c * var(--ty-c-base-mult)) h
513
600
  );
514
601
  --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)
602
+ from var(--ty-neutral-seed-resolved)
603
+ calc(var(--ty-l-soft) * var(--ty-neutral-l-factor))
604
+ calc(c * var(--ty-c-soft-mult)) h
518
605
  );
519
606
  --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)
607
+ from var(--ty-neutral-seed-resolved)
608
+ calc(var(--ty-l-faint) * var(--ty-neutral-l-factor))
609
+ calc(c * var(--ty-c-faint-mult)) h
523
610
  );
524
611
  --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)
612
+ from var(--ty-neutral-seed-resolved)
613
+ calc(var(--ty-l-bg-base) * var(--ty-neutral-l-factor))
614
+ calc(c * var(--ty-c-bg-base-mult)) h
528
615
  );
529
616
  --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)
617
+ from var(--ty-neutral-seed-resolved)
618
+ calc(var(--ty-l-bg-bold) * var(--ty-neutral-l-factor))
619
+ calc(c * var(--ty-c-bg-bold-mult)) h
533
620
  );
534
621
  --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)
622
+ from var(--ty-neutral-seed-resolved)
623
+ calc(var(--ty-l-bg-soft) * var(--ty-neutral-l-factor))
624
+ calc(c * var(--ty-c-bg-soft-mult)) h
538
625
  );
539
626
  --ty-bg-neutral-strong: oklch(
540
- 0.25 calc(var(--ty-neutral-chroma) * 2) var(--ty-neutral-hue)
627
+ from var(--ty-neutral-seed-resolved) var(--ty-l-bg-neutral-strong)
628
+ calc(c * 2) h
541
629
  );
542
630
  --ty-bg-neutral-faint: oklch(
543
- 0.99 calc(var(--ty-neutral-chroma) * 0.4) var(--ty-neutral-hue)
631
+ from var(--ty-neutral-seed-resolved) var(--ty-l-bg-neutral-faint)
632
+ calc(c * var(--ty-c-bg-neutral-faint-mult)) h
633
+ );
634
+
635
+ /* ----------------------------------------------------------------
636
+ * Global neutral borders — own family, own L ladder (Tier 3).
637
+ * Tinted by the neutral seeds like everything grey, but NOT tied to
638
+ * the text emphasis curve or --ty-neutral-l-factor. Per-flavor
639
+ * accent borders (--ty-border-{flavor}) stay ink aliases — a colored
640
+ * border SHOULD track its flavor's ink.
641
+ * --------------------------------------------------------------*/
642
+ --ty-border-strong: oklch(
643
+ from var(--ty-neutral-seed-resolved) var(--ty-l-border-strong) c h
644
+ );
645
+ --ty-border: oklch(
646
+ from var(--ty-neutral-seed-resolved) var(--ty-l-border) c h
647
+ );
648
+ --ty-border-bold: oklch(
649
+ from var(--ty-neutral-seed-resolved) var(--ty-l-border-bold) c h
650
+ );
651
+ --ty-border-soft: oklch(
652
+ from var(--ty-neutral-seed-resolved) var(--ty-l-border-soft) c h
653
+ );
654
+ --ty-border-faint: oklch(
655
+ from var(--ty-neutral-seed-resolved) var(--ty-l-border-faint) c h
544
656
  );
545
657
 
546
658
  /* ----------------------------------------------------------------
547
- * Global neutral borders — read off the neutral color ramp.
659
+ * Text ladder + surface borders — engine-wired versions of tokens
660
+ * tyrell.css hardcodes as hexes. Own L dials (Tier 3), neutral
661
+ * hue/chroma tint. These out-rank the base hexes the same way every
662
+ * other token here does; a rebrand now reaches body text too.
548
663
  * --------------------------------------------------------------*/
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);
664
+ --ty-text-strong: oklch(
665
+ from var(--ty-neutral-seed-resolved) var(--ty-l-text-strong) c h
666
+ );
667
+ --ty-text-bold: oklch(
668
+ from var(--ty-neutral-seed-resolved) var(--ty-l-text-bold) c h
669
+ );
670
+ --ty-text: oklch(
671
+ from var(--ty-neutral-seed-resolved) var(--ty-l-text-base) c h
672
+ );
673
+ --ty-text-soft: oklch(
674
+ from var(--ty-neutral-seed-resolved) var(--ty-l-text-soft) c h
675
+ );
676
+ --ty-text-faint: oklch(
677
+ from var(--ty-neutral-seed-resolved) var(--ty-l-text-faint) c h
678
+ );
679
+
680
+ --ty-content-border: oklch(
681
+ from var(--ty-neutral-seed-resolved) var(--ty-l-border-content) c h
682
+ );
683
+ --ty-elevated-border: oklch(
684
+ from var(--ty-neutral-seed-resolved) var(--ty-l-border-elevated) c h
685
+ );
686
+ --ty-floating-border: oklch(
687
+ from var(--ty-neutral-seed-resolved) var(--ty-l-border-floating) c h
688
+ );
554
689
 
555
690
  /* ----------------------------------------------------------------
556
691
  * Surfaces — monochrome by default; --ty-surface-chroma warms them.
557
692
  * --------------------------------------------------------------*/
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);
693
+ --ty-surface-canvas: oklch(
694
+ from var(--ty-primary-seed-resolved) var(--ty-l-surface-canvas)
695
+ var(--ty-surface-chroma) h
696
+ );
697
+ --ty-surface-content: oklch(
698
+ from var(--ty-primary-seed-resolved) var(--ty-l-surface-content)
699
+ var(--ty-surface-chroma) h
700
+ );
701
+ --ty-surface-elevated: oklch(
702
+ from var(--ty-primary-seed-resolved) var(--ty-l-surface-elevated)
703
+ var(--ty-surface-chroma) h
704
+ );
705
+ --ty-surface-floating: oklch(
706
+ from var(--ty-primary-seed-resolved) var(--ty-l-surface-floating)
707
+ var(--ty-surface-chroma) h
708
+ );
709
+ --ty-surface-input: oklch(
710
+ from var(--ty-primary-seed-resolved) var(--ty-l-surface-input)
711
+ var(--ty-surface-chroma) h
712
+ );
563
713
 
564
714
  /* ----------------------------------------------------------------
565
715
  * Inputs — tied to neutral ramp so form controls retint with brand.
@@ -575,7 +725,7 @@ html[data-theme="dark"] {
575
725
  --ty-input-disabled-color: var(--ty-color-neutral-bold);
576
726
  --ty-input-shadow-focus: color-mix(
577
727
  in oklab,
578
- var(--ty-color-primary) 5%,
728
+ var(--ty-color-primary) var(--ty-focus-ring-alpha),
579
729
  transparent
580
730
  );
581
731
  }
@@ -597,16 +747,13 @@ html[data-theme="dark"] {
597
747
  * the oklch(from var(--ty-color-*)) formulas resolve per-mode automatically,
598
748
  * so no dark duplicate is needed.
599
749
  * --------------------------------------------------------------*/
600
- html:root {
750
+ html:root,
751
+ [data-ty-theme] {
601
752
  /* base fill per flavor (= flavor color, theme-adjusted by Axis B) */
602
753
  --ty-solid-primary: oklch(
603
754
  from var(--ty-color-primary) calc(l + var(--ty-solid-l))
604
755
  calc(c * var(--ty-solid-c)) calc(h + var(--ty-solid-h))
605
756
  );
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
757
  --ty-solid-success: oklch(
611
758
  from var(--ty-color-success) calc(l + var(--ty-solid-l))
612
759
  calc(c * var(--ty-solid-c)) calc(h + var(--ty-solid-h))
@@ -621,8 +768,8 @@ html:root {
621
768
  );
622
769
  /* neutral is a deliberate dark grey fill, not the neutral text color */
623
770
  --ty-solid-neutral: oklch(
624
- 0.4 calc(var(--ty-neutral-chroma) * var(--ty-c-strong-mult))
625
- var(--ty-neutral-hue)
771
+ from var(--ty-neutral-seed-resolved) var(--ty-l-solid-neutral)
772
+ calc(c * var(--ty-c-strong-mult)) h
626
773
  );
627
774
 
628
775
  /* ----------------------------------------------------------------
@@ -647,7 +794,7 @@ html:root {
647
794
 
648
795
  /* Crossover point. Fills lighter than this get black text. ~0.58-0.62
649
796
  is the sRGB break-even; higher = prefers white, lower = prefers black. */
650
- --ty-solid-fg-threshold: 0.6;
797
+ --ty-solid-fg-threshold: 0.62;
651
798
 
652
799
  --ty-solid-primary-fg: oklch(
653
800
  from var(--ty-solid-primary)
@@ -662,18 +809,6 @@ html:root {
662
809
  clamp(0, (var(--ty-solid-fg-threshold) - l) * 1000, 1) 0 0
663
810
  );
664
811
 
665
- --ty-solid-secondary-fg: oklch(
666
- from var(--ty-solid-secondary)
667
- clamp(0, (var(--ty-solid-fg-threshold) - l) * 1000, 1) 0 0
668
- );
669
- --ty-solid-secondary-soft-fg: oklch(
670
- from var(--ty-solid-secondary-soft)
671
- clamp(0, (var(--ty-solid-fg-threshold) - l) * 1000, 1) 0 0
672
- );
673
- --ty-solid-secondary-strong-fg: oklch(
674
- from var(--ty-solid-secondary-strong)
675
- clamp(0, (var(--ty-solid-fg-threshold) - l) * 1000, 1) 0 0
676
- );
677
812
 
678
813
  --ty-solid-success-fg: oklch(
679
814
  from var(--ty-solid-success)
@@ -741,18 +876,6 @@ html:root {
741
876
  from var(--ty-solid-primary) calc(l + var(--ty-solid-soft-l)) c h
742
877
  );
743
878
 
744
- --ty-solid-secondary-hover: oklch(
745
- from var(--ty-solid-secondary) calc(l + var(--ty-solid-hover-l)) c h
746
- );
747
- --ty-solid-secondary-active: oklch(
748
- from var(--ty-solid-secondary) calc(l + var(--ty-solid-active-l)) c h
749
- );
750
- --ty-solid-secondary-strong: oklch(
751
- from var(--ty-solid-secondary) calc(l + var(--ty-solid-strong-l)) c h
752
- );
753
- --ty-solid-secondary-soft: oklch(
754
- from var(--ty-solid-secondary) calc(l + var(--ty-solid-soft-l)) c h
755
- );
756
879
 
757
880
  --ty-solid-success-hover: oklch(
758
881
  from var(--ty-solid-success) calc(l + var(--ty-solid-hover-l)) c h
@@ -807,304 +930,439 @@ html:root {
807
930
  );
808
931
  }
809
932
 
933
+
810
934
  /* =====================================================================
811
- * SECTION 2 DARK same computations re-declared so html.dark (0,1,1)
812
- * matches tyrell.css's hardcoded dark-mode hexes at source-order
813
- * specificity. The math is identical to the :root block above; only
814
- * the L/C inputs differ (from html.dark's Tier 3/4 overrides).
935
+ * SECTION 3THEME TRANSITIONS
936
+ * =====================================================================
937
+ *
938
+ * Every dial above is a plain number (or percentage) and every color
939
+ * in the system is a pure function of those dials. Registering the
940
+ * dials as typed custom properties makes them INTERPOLABLE, so a theme
941
+ * or mode switch (html.dark, html.love, a [data-ty-theme] pack) does
942
+ * not snap: the dials animate, and every derived color — buttons,
943
+ * borders, surfaces, text, focus rings — crossfades through OKLCH
944
+ * space frame by frame. No JS, no repaint tricks; it falls out of the
945
+ * dials-not-colors architecture.
946
+ *
947
+ * Opt out (or retune) per app:
948
+ * :root { --ty-theme-transition: 0s; } no animation
949
+ * :root { --ty-theme-transition: 1.2s; } slower crossfade
950
+ * Reduced-motion users never get the animation.
951
+ *
952
+ * Browsers without @property simply skip registration — themes still
953
+ * work, switches just snap (the pre-TC37 behavior).
815
954
  * ===================================================================== */
816
955
 
817
- html.dark,
818
- html[data-theme="dark"] {
819
- /* Primary */
820
- --ty-color-primary-strong: oklch(
821
- calc(var(--ty-l-strong) * var(--ty-primary-l-factor))
822
- calc(var(--ty-brand-chroma) * var(--ty-c-strong-mult)) var(--ty-brand-hue)
823
- );
824
- --ty-color-primary-bold: oklch(
825
- calc(var(--ty-l-bold) * var(--ty-primary-l-factor))
826
- calc(var(--ty-brand-chroma) * var(--ty-c-bold-mult)) var(--ty-brand-hue)
827
- );
828
- --ty-color-primary: oklch(
829
- calc(var(--ty-l-base) * var(--ty-primary-l-factor))
830
- calc(var(--ty-brand-chroma) * var(--ty-c-base-mult)) var(--ty-brand-hue)
831
- );
832
- --ty-color-primary-soft: oklch(
833
- calc(var(--ty-l-soft) * var(--ty-primary-l-factor))
834
- calc(var(--ty-brand-chroma) * var(--ty-c-soft-mult)) var(--ty-brand-hue)
835
- );
836
- --ty-color-primary-faint: oklch(
837
- calc(var(--ty-l-faint) * var(--ty-primary-l-factor))
838
- calc(var(--ty-brand-chroma) * var(--ty-c-faint-mult)) var(--ty-brand-hue)
839
- );
840
- --ty-bg-primary: oklch(
841
- calc(var(--ty-l-bg-base) * var(--ty-primary-l-factor))
842
- calc(var(--ty-brand-chroma) * var(--ty-c-bg-base-mult))
843
- var(--ty-brand-hue)
844
- );
845
- --ty-bg-primary-bold: oklch(
846
- calc(var(--ty-l-bg-bold) * var(--ty-primary-l-factor))
847
- calc(var(--ty-brand-chroma) * var(--ty-c-bg-bold-mult))
848
- var(--ty-brand-hue)
849
- );
850
- --ty-bg-primary-soft: oklch(
851
- calc(var(--ty-l-bg-soft) * var(--ty-primary-l-factor))
852
- calc(var(--ty-brand-chroma) * var(--ty-c-bg-soft-mult))
853
- var(--ty-brand-hue)
854
- );
855
- --ty-border-primary: var(--ty-color-primary-soft);
856
-
857
- /* Secondary */
858
- --ty-color-secondary-strong: oklch(
859
- calc(var(--ty-l-strong) * var(--ty-secondary-l-factor))
860
- calc(var(--ty-secondary-chroma) * var(--ty-c-strong-mult))
861
- var(--ty-secondary-hue)
862
- );
863
- --ty-color-secondary-bold: oklch(
864
- calc(var(--ty-l-bold) * var(--ty-secondary-l-factor))
865
- calc(var(--ty-secondary-chroma) * var(--ty-c-bold-mult))
866
- var(--ty-secondary-hue)
867
- );
868
- --ty-color-secondary: oklch(
869
- calc(var(--ty-l-base) * var(--ty-secondary-l-factor))
870
- calc(var(--ty-secondary-chroma) * var(--ty-c-base-mult))
871
- var(--ty-secondary-hue)
872
- );
873
- --ty-color-secondary-soft: oklch(
874
- calc(var(--ty-l-soft) * var(--ty-secondary-l-factor))
875
- calc(var(--ty-secondary-chroma) * var(--ty-c-soft-mult))
876
- var(--ty-secondary-hue)
877
- );
878
- --ty-color-secondary-faint: oklch(
879
- calc(var(--ty-l-faint) * var(--ty-secondary-l-factor))
880
- calc(var(--ty-secondary-chroma) * var(--ty-c-faint-mult))
881
- var(--ty-secondary-hue)
882
- );
883
- --ty-bg-secondary: oklch(
884
- calc(var(--ty-l-bg-base) * var(--ty-secondary-l-factor))
885
- calc(var(--ty-secondary-chroma) * var(--ty-c-bg-base-mult))
886
- var(--ty-secondary-hue)
887
- );
888
- --ty-bg-secondary-bold: oklch(
889
- calc(var(--ty-l-bg-bold) * var(--ty-secondary-l-factor))
890
- calc(var(--ty-secondary-chroma) * var(--ty-c-bg-bold-mult))
891
- var(--ty-secondary-hue)
892
- );
893
- --ty-bg-secondary-soft: oklch(
894
- calc(var(--ty-l-bg-soft) * var(--ty-secondary-l-factor))
895
- calc(var(--ty-secondary-chroma) * var(--ty-c-bg-soft-mult))
896
- var(--ty-secondary-hue)
897
- );
898
- --ty-border-secondary: var(--ty-color-secondary-soft);
899
-
900
- /* Success */
901
- --ty-color-success-strong: oklch(
902
- calc(var(--ty-l-strong) * var(--ty-success-l-factor))
903
- calc(var(--ty-success-chroma) * var(--ty-c-strong-mult))
904
- var(--ty-success-hue)
905
- );
906
- --ty-color-success-bold: oklch(
907
- calc(var(--ty-l-bold) * var(--ty-success-l-factor))
908
- calc(var(--ty-success-chroma) * var(--ty-c-bold-mult))
909
- var(--ty-success-hue)
910
- );
911
- --ty-color-success: oklch(
912
- calc(var(--ty-l-base) * var(--ty-success-l-factor))
913
- calc(var(--ty-success-chroma) * var(--ty-c-base-mult))
914
- var(--ty-success-hue)
915
- );
916
- --ty-color-success-soft: oklch(
917
- calc(var(--ty-l-soft) * var(--ty-success-l-factor))
918
- calc(var(--ty-success-chroma) * var(--ty-c-soft-mult))
919
- var(--ty-success-hue)
920
- );
921
- --ty-color-success-faint: oklch(
922
- calc(var(--ty-l-faint) * var(--ty-success-l-factor))
923
- calc(var(--ty-success-chroma) * var(--ty-c-faint-mult))
924
- var(--ty-success-hue)
925
- );
926
- --ty-bg-success: oklch(
927
- calc(var(--ty-l-bg-base) * var(--ty-success-l-factor))
928
- calc(var(--ty-success-chroma) * var(--ty-c-bg-base-mult))
929
- var(--ty-success-hue)
930
- );
931
- --ty-bg-success-bold: oklch(
932
- calc(var(--ty-l-bg-bold) * var(--ty-success-l-factor))
933
- calc(var(--ty-success-chroma) * var(--ty-c-bg-bold-mult))
934
- var(--ty-success-hue)
935
- );
936
- --ty-bg-success-soft: oklch(
937
- calc(var(--ty-l-bg-soft) * var(--ty-success-l-factor))
938
- calc(var(--ty-success-chroma) * var(--ty-c-bg-soft-mult))
939
- var(--ty-success-hue)
940
- );
941
- --ty-border-success: var(--ty-color-success-soft);
942
-
943
- /* Danger */
944
- --ty-color-danger-strong: oklch(
945
- calc(var(--ty-l-strong) * var(--ty-danger-l-factor))
946
- calc(var(--ty-danger-chroma) * var(--ty-c-strong-mult))
947
- var(--ty-danger-hue)
948
- );
949
- --ty-color-danger-bold: oklch(
950
- calc(var(--ty-l-bold) * var(--ty-danger-l-factor))
951
- calc(var(--ty-danger-chroma) * var(--ty-c-bold-mult)) var(--ty-danger-hue)
952
- );
953
- --ty-color-danger: oklch(
954
- calc(var(--ty-l-base) * var(--ty-danger-l-factor))
955
- calc(var(--ty-danger-chroma) * var(--ty-c-base-mult)) var(--ty-danger-hue)
956
- );
957
- --ty-color-danger-soft: oklch(
958
- calc(var(--ty-l-soft) * var(--ty-danger-l-factor))
959
- calc(var(--ty-danger-chroma) * var(--ty-c-soft-mult)) var(--ty-danger-hue)
960
- );
961
- --ty-color-danger-faint: oklch(
962
- calc(var(--ty-l-faint) * var(--ty-danger-l-factor))
963
- calc(var(--ty-danger-chroma) * var(--ty-c-faint-mult))
964
- var(--ty-danger-hue)
965
- );
966
- --ty-bg-danger: oklch(
967
- calc(var(--ty-l-bg-base) * var(--ty-danger-l-factor))
968
- calc(var(--ty-danger-chroma) * var(--ty-c-bg-base-mult))
969
- var(--ty-danger-hue)
970
- );
971
- --ty-bg-danger-bold: oklch(
972
- calc(var(--ty-l-bg-bold) * var(--ty-danger-l-factor))
973
- calc(var(--ty-danger-chroma) * var(--ty-c-bg-bold-mult))
974
- var(--ty-danger-hue)
975
- );
976
- --ty-bg-danger-soft: oklch(
977
- calc(var(--ty-l-bg-soft) * var(--ty-danger-l-factor))
978
- calc(var(--ty-danger-chroma) * var(--ty-c-bg-soft-mult))
979
- var(--ty-danger-hue)
980
- );
981
- --ty-border-danger: var(--ty-color-danger-soft);
982
-
983
- /* Warning */
984
- --ty-color-warning-strong: oklch(
985
- calc(var(--ty-l-strong) * var(--ty-warning-l-factor))
986
- calc(var(--ty-warning-chroma) * var(--ty-c-strong-mult))
987
- var(--ty-warning-hue)
988
- );
989
- --ty-color-warning-bold: oklch(
990
- calc(var(--ty-l-bold) * var(--ty-warning-l-factor))
991
- calc(var(--ty-warning-chroma) * var(--ty-c-bold-mult))
992
- var(--ty-warning-hue)
993
- );
994
- --ty-color-warning: oklch(
995
- calc(var(--ty-l-base) * var(--ty-warning-l-factor))
996
- calc(var(--ty-warning-chroma) * var(--ty-c-base-mult))
997
- var(--ty-warning-hue)
998
- );
999
- --ty-color-warning-soft: oklch(
1000
- calc(var(--ty-l-soft) * var(--ty-warning-l-factor))
1001
- calc(var(--ty-warning-chroma) * var(--ty-c-soft-mult))
1002
- var(--ty-warning-hue)
1003
- );
1004
- --ty-color-warning-faint: oklch(
1005
- calc(var(--ty-l-faint) * var(--ty-warning-l-factor))
1006
- calc(var(--ty-warning-chroma) * var(--ty-c-faint-mult))
1007
- var(--ty-warning-hue)
1008
- );
1009
- --ty-bg-warning: oklch(
1010
- calc(var(--ty-l-bg-base) * var(--ty-warning-l-factor))
1011
- calc(var(--ty-warning-chroma) * var(--ty-c-bg-base-mult))
1012
- var(--ty-warning-hue)
1013
- );
1014
- --ty-bg-warning-bold: oklch(
1015
- calc(var(--ty-l-bg-bold) * var(--ty-warning-l-factor))
1016
- calc(var(--ty-warning-chroma) * var(--ty-c-bg-bold-mult))
1017
- var(--ty-warning-hue)
1018
- );
1019
- --ty-bg-warning-soft: oklch(
1020
- calc(var(--ty-l-bg-soft) * var(--ty-warning-l-factor))
1021
- calc(var(--ty-warning-chroma) * var(--ty-c-bg-soft-mult))
1022
- var(--ty-warning-hue)
1023
- );
1024
- --ty-border-warning: var(--ty-color-warning-soft);
1025
-
1026
- /* Neutral */
1027
- --ty-color-neutral-strong: oklch(
1028
- calc(var(--ty-l-strong) * var(--ty-neutral-l-factor))
1029
- calc(var(--ty-neutral-chroma) * var(--ty-c-strong-mult))
1030
- var(--ty-neutral-hue)
1031
- );
1032
- --ty-color-neutral-bold: oklch(
1033
- calc(var(--ty-l-bold) * var(--ty-neutral-l-factor))
1034
- calc(var(--ty-neutral-chroma) * var(--ty-c-bold-mult))
1035
- var(--ty-neutral-hue)
1036
- );
1037
- --ty-color-neutral: oklch(
1038
- calc(var(--ty-l-base) * var(--ty-neutral-l-factor))
1039
- calc(var(--ty-neutral-chroma) * var(--ty-c-base-mult))
1040
- var(--ty-neutral-hue)
1041
- );
1042
- --ty-color-neutral-soft: oklch(
1043
- calc(var(--ty-l-soft) * var(--ty-neutral-l-factor))
1044
- calc(var(--ty-neutral-chroma) * var(--ty-c-soft-mult))
1045
- var(--ty-neutral-hue)
1046
- );
1047
- --ty-color-neutral-faint: oklch(
1048
- calc(var(--ty-l-faint) * var(--ty-neutral-l-factor))
1049
- calc(var(--ty-neutral-chroma) * var(--ty-c-faint-mult))
1050
- var(--ty-neutral-hue)
1051
- );
1052
- --ty-bg-neutral: oklch(
1053
- calc(var(--ty-l-bg-base) * var(--ty-neutral-l-factor))
1054
- calc(var(--ty-neutral-chroma) * var(--ty-c-bg-base-mult))
1055
- var(--ty-neutral-hue)
1056
- );
1057
- --ty-bg-neutral-bold: oklch(
1058
- calc(var(--ty-l-bg-bold) * var(--ty-neutral-l-factor))
1059
- calc(var(--ty-neutral-chroma) * var(--ty-c-bg-bold-mult))
1060
- var(--ty-neutral-hue)
1061
- );
1062
- --ty-bg-neutral-soft: oklch(
1063
- calc(var(--ty-l-bg-soft) * var(--ty-neutral-l-factor))
1064
- calc(var(--ty-neutral-chroma) * var(--ty-c-bg-soft-mult))
1065
- var(--ty-neutral-hue)
1066
- );
1067
- --ty-bg-neutral-strong: oklch(
1068
- 0.95 calc(var(--ty-neutral-chroma) * 2) var(--ty-neutral-hue)
1069
- );
1070
- --ty-bg-neutral-faint: oklch(
1071
- 0.15 calc(var(--ty-neutral-chroma) * 2) var(--ty-neutral-hue)
1072
- );
1073
-
1074
- /* Global neutral borders */
1075
- --ty-border-strong: var(--ty-color-neutral-bold);
1076
- --ty-border: var(--ty-color-neutral-soft);
1077
- --ty-border-bold: var(--ty-color-neutral-soft);
1078
- --ty-border-soft: var(--ty-color-neutral-faint);
1079
- --ty-border-faint: var(--ty-color-neutral-faint);
1080
-
1081
- /* Surfaces — monochrome by default; --ty-surface-chroma warms them. */
1082
- --ty-surface-canvas: oklch(0.12 var(--ty-surface-chroma) var(--ty-brand-hue));
1083
- --ty-surface-content: oklch(0.16 var(--ty-surface-chroma) var(--ty-brand-hue));
1084
- --ty-surface-elevated: oklch(0.19 var(--ty-surface-chroma) var(--ty-brand-hue));
1085
- --ty-surface-floating: oklch(0.22 var(--ty-surface-chroma) var(--ty-brand-hue));
1086
- --ty-surface-input: oklch(0.18 var(--ty-surface-chroma) var(--ty-brand-hue));
956
+ @property --ty-brand-hue {
957
+ syntax: "<number>";
958
+ inherits: true;
959
+ initial-value: 45;
960
+ }
961
+ @property --ty-brand-chroma {
962
+ syntax: "<number>";
963
+ inherits: true;
964
+ initial-value: 0.125;
965
+ }
966
+ @property --ty-surface-chroma {
967
+ syntax: "<number>";
968
+ inherits: true;
969
+ initial-value: 0;
970
+ }
971
+ @property --ty-success-hue {
972
+ syntax: "<number>";
973
+ inherits: true;
974
+ initial-value: 145;
975
+ }
976
+ @property --ty-success-chroma {
977
+ syntax: "<number>";
978
+ inherits: true;
979
+ initial-value: 0.135;
980
+ }
981
+ @property --ty-warning-hue {
982
+ syntax: "<number>";
983
+ inherits: true;
984
+ initial-value: 75;
985
+ }
986
+ @property --ty-warning-chroma {
987
+ syntax: "<number>";
988
+ inherits: true;
989
+ initial-value: 0.25;
990
+ }
991
+ @property --ty-danger-hue {
992
+ syntax: "<number>";
993
+ inherits: true;
994
+ initial-value: 25;
995
+ }
996
+ @property --ty-danger-chroma {
997
+ syntax: "<number>";
998
+ inherits: true;
999
+ initial-value: 0.164;
1000
+ }
1001
+ @property --ty-neutral-hue {
1002
+ syntax: "<number>";
1003
+ inherits: true;
1004
+ initial-value: 0;
1005
+ }
1006
+ @property --ty-neutral-chroma {
1007
+ syntax: "<number>";
1008
+ inherits: true;
1009
+ initial-value: 0;
1010
+ }
1011
+ @property --ty-l-strong {
1012
+ syntax: "<number>";
1013
+ inherits: true;
1014
+ initial-value: 0.38;
1015
+ }
1016
+ @property --ty-l-bold {
1017
+ syntax: "<number>";
1018
+ inherits: true;
1019
+ initial-value: 0.46;
1020
+ }
1021
+ @property --ty-l-base {
1022
+ syntax: "<number>";
1023
+ inherits: true;
1024
+ initial-value: 0.54;
1025
+ }
1026
+ @property --ty-l-soft {
1027
+ syntax: "<number>";
1028
+ inherits: true;
1029
+ initial-value: 0.72;
1030
+ }
1031
+ @property --ty-l-faint {
1032
+ syntax: "<number>";
1033
+ inherits: true;
1034
+ initial-value: 0.88;
1035
+ }
1036
+ @property --ty-l-bg-base {
1037
+ syntax: "<number>";
1038
+ inherits: true;
1039
+ initial-value: 0.96;
1040
+ }
1041
+ @property --ty-l-bg-bold {
1042
+ syntax: "<number>";
1043
+ inherits: true;
1044
+ initial-value: 0.92;
1045
+ }
1046
+ @property --ty-l-bg-soft {
1047
+ syntax: "<number>";
1048
+ inherits: true;
1049
+ initial-value: 0.98;
1050
+ }
1051
+ @property --ty-l-text-strong {
1052
+ syntax: "<number>";
1053
+ inherits: true;
1054
+ initial-value: 0;
1055
+ }
1056
+ @property --ty-l-text-bold {
1057
+ syntax: "<number>";
1058
+ inherits: true;
1059
+ initial-value: 0;
1060
+ }
1061
+ @property --ty-l-text-base {
1062
+ syntax: "<number>";
1063
+ inherits: true;
1064
+ initial-value: 0.21;
1065
+ }
1066
+ @property --ty-l-text-soft {
1067
+ syntax: "<number>";
1068
+ inherits: true;
1069
+ initial-value: 0.37;
1070
+ }
1071
+ @property --ty-l-text-faint {
1072
+ syntax: "<number>";
1073
+ inherits: true;
1074
+ initial-value: 0.71;
1075
+ }
1076
+ @property --ty-l-border-content {
1077
+ syntax: "<number>";
1078
+ inherits: true;
1079
+ initial-value: 0.93;
1080
+ }
1081
+ @property --ty-l-border-elevated {
1082
+ syntax: "<number>";
1083
+ inherits: true;
1084
+ initial-value: 0.93;
1085
+ }
1086
+ @property --ty-l-border-floating {
1087
+ syntax: "<number>";
1088
+ inherits: true;
1089
+ initial-value: 0.93;
1090
+ }
1091
+ @property --ty-l-border-strong {
1092
+ syntax: "<number>";
1093
+ inherits: true;
1094
+ initial-value: 0.46;
1095
+ }
1096
+ @property --ty-l-border-bold {
1097
+ syntax: "<number>";
1098
+ inherits: true;
1099
+ initial-value: 0.64;
1100
+ }
1101
+ @property --ty-l-border {
1102
+ syntax: "<number>";
1103
+ inherits: true;
1104
+ initial-value: 0.76;
1105
+ }
1106
+ @property --ty-l-border-soft {
1107
+ syntax: "<number>";
1108
+ inherits: true;
1109
+ initial-value: 0.88;
1110
+ }
1111
+ @property --ty-l-border-faint {
1112
+ syntax: "<number>";
1113
+ inherits: true;
1114
+ initial-value: 0.92;
1115
+ }
1116
+ @property --ty-l-surface-canvas {
1117
+ syntax: "<number>";
1118
+ inherits: true;
1119
+ initial-value: 0.985;
1120
+ }
1121
+ @property --ty-l-surface-content {
1122
+ syntax: "<number>";
1123
+ inherits: true;
1124
+ initial-value: 1;
1125
+ }
1126
+ @property --ty-l-surface-elevated {
1127
+ syntax: "<number>";
1128
+ inherits: true;
1129
+ initial-value: 1;
1130
+ }
1131
+ @property --ty-l-surface-floating {
1132
+ syntax: "<number>";
1133
+ inherits: true;
1134
+ initial-value: 1;
1135
+ }
1136
+ @property --ty-l-surface-input {
1137
+ syntax: "<number>";
1138
+ inherits: true;
1139
+ initial-value: 1;
1140
+ }
1141
+ @property --ty-l-solid-neutral {
1142
+ syntax: "<number>";
1143
+ inherits: true;
1144
+ initial-value: 0.4;
1145
+ }
1146
+ @property --ty-l-bg-neutral-strong {
1147
+ syntax: "<number>";
1148
+ inherits: true;
1149
+ initial-value: 0.25;
1150
+ }
1151
+ @property --ty-l-bg-neutral-faint {
1152
+ syntax: "<number>";
1153
+ inherits: true;
1154
+ initial-value: 0.99;
1155
+ }
1156
+ @property --ty-c-bg-neutral-faint-mult {
1157
+ syntax: "<number>";
1158
+ inherits: true;
1159
+ initial-value: 0.4;
1160
+ }
1161
+ @property --ty-c-strong-mult {
1162
+ syntax: "<number>";
1163
+ inherits: true;
1164
+ initial-value: 0.77;
1165
+ }
1166
+ @property --ty-c-bold-mult {
1167
+ syntax: "<number>";
1168
+ inherits: true;
1169
+ initial-value: 1;
1170
+ }
1171
+ @property --ty-c-base-mult {
1172
+ syntax: "<number>";
1173
+ inherits: true;
1174
+ initial-value: 0.92;
1175
+ }
1176
+ @property --ty-c-soft-mult {
1177
+ syntax: "<number>";
1178
+ inherits: true;
1179
+ initial-value: 0.77;
1180
+ }
1181
+ @property --ty-c-faint-mult {
1182
+ syntax: "<number>";
1183
+ inherits: true;
1184
+ initial-value: 0.46;
1185
+ }
1186
+ @property --ty-c-bg-base-mult {
1187
+ syntax: "<number>";
1188
+ inherits: true;
1189
+ initial-value: 0.15;
1190
+ }
1191
+ @property --ty-c-bg-bold-mult {
1192
+ syntax: "<number>";
1193
+ inherits: true;
1194
+ initial-value: 0.38;
1195
+ }
1196
+ @property --ty-c-bg-soft-mult {
1197
+ syntax: "<number>";
1198
+ inherits: true;
1199
+ initial-value: 0.08;
1200
+ }
1201
+ @property --ty-primary-l-factor {
1202
+ syntax: "<number>";
1203
+ inherits: true;
1204
+ initial-value: 1;
1205
+ }
1206
+ @property --ty-success-l-factor {
1207
+ syntax: "<number>";
1208
+ inherits: true;
1209
+ initial-value: 1;
1210
+ }
1211
+ @property --ty-warning-l-factor {
1212
+ syntax: "<number>";
1213
+ inherits: true;
1214
+ initial-value: 1.15;
1215
+ }
1216
+ @property --ty-danger-l-factor {
1217
+ syntax: "<number>";
1218
+ inherits: true;
1219
+ initial-value: 1;
1220
+ }
1221
+ @property --ty-neutral-l-factor {
1222
+ syntax: "<number>";
1223
+ inherits: true;
1224
+ initial-value: 1;
1225
+ }
1226
+ @property --ty-solid-hover-l {
1227
+ syntax: "<number>";
1228
+ inherits: true;
1229
+ initial-value: -0.04;
1230
+ }
1231
+ @property --ty-solid-active-l {
1232
+ syntax: "<number>";
1233
+ inherits: true;
1234
+ initial-value: -0.08;
1235
+ }
1236
+ @property --ty-solid-strong-l {
1237
+ syntax: "<number>";
1238
+ inherits: true;
1239
+ initial-value: -0.06;
1240
+ }
1241
+ @property --ty-solid-soft-l {
1242
+ syntax: "<number>";
1243
+ inherits: true;
1244
+ initial-value: 0.1;
1245
+ }
1246
+ @property --ty-solid-l {
1247
+ syntax: "<number>";
1248
+ inherits: true;
1249
+ initial-value: 0;
1250
+ }
1251
+ @property --ty-solid-c {
1252
+ syntax: "<number>";
1253
+ inherits: true;
1254
+ initial-value: 1;
1255
+ }
1256
+ @property --ty-solid-h {
1257
+ syntax: "<number>";
1258
+ inherits: true;
1259
+ initial-value: 0;
1260
+ }
1261
+ @property --ty-solid-fg-threshold {
1262
+ syntax: "<number>";
1263
+ inherits: true;
1264
+ initial-value: 0.62;
1265
+ }
1266
+ @property --ty-focus-ring-alpha {
1267
+ syntax: "<percentage>";
1268
+ inherits: true;
1269
+ initial-value: 5%;
1270
+ }
1087
1271
 
1088
- /* Inputs — re-declared at html.dark specificity. */
1089
- --ty-input-bg: var(--ty-surface-input);
1090
- --ty-input-color: var(--ty-color-neutral-strong);
1091
- --ty-input-border: var(--ty-color-neutral-faint);
1092
- --ty-input-border-hover: var(--ty-color-neutral-soft);
1093
- --ty-input-border-focus: var(--ty-color-primary);
1094
- --ty-input-placeholder: var(--ty-color-neutral-soft);
1095
- --ty-input-disabled-bg: var(--ty-color-neutral-faint);
1096
- --ty-input-disabled-border: var(--ty-color-neutral-faint);
1097
- --ty-input-disabled-color: var(--ty-color-neutral-bold);
1098
- --ty-input-shadow-focus: color-mix(
1099
- in oklab,
1100
- var(--ty-color-primary) 20%,
1101
- transparent
1102
- );
1272
+ @property --ty-primary-seed-resolved {
1273
+ syntax: "<color>";
1274
+ inherits: true;
1275
+ initial-value: #808080;
1276
+ }
1277
+ @property --ty-success-seed-resolved {
1278
+ syntax: "<color>";
1279
+ inherits: true;
1280
+ initial-value: #808080;
1281
+ }
1282
+ @property --ty-warning-seed-resolved {
1283
+ syntax: "<color>";
1284
+ inherits: true;
1285
+ initial-value: #808080;
1286
+ }
1287
+ @property --ty-danger-seed-resolved {
1288
+ syntax: "<color>";
1289
+ inherits: true;
1290
+ initial-value: #808080;
1291
+ }
1292
+ @property --ty-neutral-seed-resolved {
1293
+ syntax: "<color>";
1294
+ inherits: true;
1295
+ initial-value: #808080;
1296
+ }
1103
1297
 
1104
- /* Tier 6 dark — solid dials live in SECTION 1's html.dark block.
1105
- * neutral is hand-pinned (it ignores Axis B); dim it per theme here. */
1106
- --ty-solid-neutral: oklch(
1107
- 0.3 calc(var(--ty-neutral-chroma) * var(--ty-c-strong-mult))
1108
- var(--ty-neutral-hue)
1109
- );
1298
+ @media (prefers-reduced-motion: no-preference) {
1299
+ html,
1300
+ [data-ty-theme] {
1301
+ transition-property:
1302
+ --ty-brand-hue,
1303
+ --ty-brand-chroma,
1304
+ --ty-surface-chroma,
1305
+ --ty-success-hue,
1306
+ --ty-success-chroma,
1307
+ --ty-warning-hue,
1308
+ --ty-warning-chroma,
1309
+ --ty-danger-hue,
1310
+ --ty-danger-chroma,
1311
+ --ty-neutral-hue,
1312
+ --ty-neutral-chroma,
1313
+ --ty-l-strong,
1314
+ --ty-l-bold,
1315
+ --ty-l-base,
1316
+ --ty-l-soft,
1317
+ --ty-l-faint,
1318
+ --ty-l-bg-base,
1319
+ --ty-l-bg-bold,
1320
+ --ty-l-bg-soft,
1321
+ --ty-l-text-strong,
1322
+ --ty-l-text-bold,
1323
+ --ty-l-text-base,
1324
+ --ty-l-text-soft,
1325
+ --ty-l-text-faint,
1326
+ --ty-l-border-content,
1327
+ --ty-l-border-elevated,
1328
+ --ty-l-border-floating,
1329
+ --ty-l-border-strong,
1330
+ --ty-l-border-bold,
1331
+ --ty-l-border,
1332
+ --ty-l-border-soft,
1333
+ --ty-l-border-faint,
1334
+ --ty-l-surface-canvas,
1335
+ --ty-l-surface-content,
1336
+ --ty-l-surface-elevated,
1337
+ --ty-l-surface-floating,
1338
+ --ty-l-surface-input,
1339
+ --ty-l-solid-neutral,
1340
+ --ty-l-bg-neutral-strong,
1341
+ --ty-l-bg-neutral-faint,
1342
+ --ty-c-bg-neutral-faint-mult,
1343
+ --ty-c-strong-mult,
1344
+ --ty-c-bold-mult,
1345
+ --ty-c-base-mult,
1346
+ --ty-c-soft-mult,
1347
+ --ty-c-faint-mult,
1348
+ --ty-c-bg-base-mult,
1349
+ --ty-c-bg-bold-mult,
1350
+ --ty-c-bg-soft-mult,
1351
+ --ty-primary-l-factor,
1352
+ --ty-success-l-factor,
1353
+ --ty-warning-l-factor,
1354
+ --ty-danger-l-factor,
1355
+ --ty-neutral-l-factor,
1356
+ --ty-solid-hover-l,
1357
+ --ty-solid-active-l,
1358
+ --ty-solid-strong-l,
1359
+ --ty-solid-soft-l,
1360
+ --ty-solid-l,
1361
+ --ty-solid-c,
1362
+ --ty-solid-h,
1363
+ --ty-solid-fg-threshold,
1364
+ --ty-focus-ring-alpha;
1365
+ transition-duration: var(--ty-theme-transition, 0.45s);
1366
+ transition-timing-function: ease;
1367
+ }
1110
1368
  }