tyrell-components 1.0.0-TC41 → 1.0.0-TC43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/css/tyrell.css CHANGED
@@ -124,51 +124,10 @@ CSS VARIABLES - DESIGN TOKENS
124
124
 
125
125
  /* Default theme (light) */
126
126
  html {
127
- /* =================================================================
128
- 5-VARIANT COLOR SYSTEM
129
- Simplified from 7 variants to 5 practical variants:
130
- -strong = Strong emphasis - active states, strong borders
131
- -bold = Moderate emphasis - hover states, focus rings
132
- = Base color - default appearance
133
- -soft = Reduced emphasis - muted backgrounds, de-emphasis
134
- -faint = Minimal emphasis - subtle hints, disabled states
135
- ================================================================= */
136
-
137
- /* Primary */
138
- --ty-color-primary-strong: #163793;
139
- --ty-color-primary-bold: #304c9f;
140
- --ty-color-primary: #466bce;
141
- --ty-color-primary-soft: #60a5fa;
142
- --ty-color-primary-faint: #93c5fd;
143
-
144
- /* Success */
145
- --ty-color-success-strong: #177858;
146
- --ty-color-success-bold: #3e9779;
147
- --ty-color-success: #3eaa86;
148
- --ty-color-success-soft: #64b399;
149
- --ty-color-success-faint: #7fd4b2;
150
-
151
- /* Danger */
152
- --ty-color-danger-strong: #b91c1c;
153
- --ty-color-danger-bold: #dc2626;
154
- --ty-color-danger: #ef4444;
155
- --ty-color-danger-soft: #f87171;
156
- --ty-color-danger-faint: #fca5a5;
157
-
158
- /* Warning */
159
- --ty-color-warning-strong: #e86400;
160
- --ty-color-warning-bold: #ee7f00;
161
- --ty-color-warning: #f59e0b;
162
- --ty-color-warning-soft: #fbbf24;
163
- --ty-color-warning-faint: #fcd34d;
164
-
165
- /* Neutral */
166
- --ty-color-neutral-strong: #000000;
167
- --ty-color-neutral-bold: #000000;
168
- --ty-color-neutral: #111827;
169
- --ty-color-neutral-soft: #374151;
170
- --ty-color-neutral-faint: #9ca3af;
171
-
127
+ /* Color tokens (--ty-color-*, --ty-bg-{flavor}-*, --ty-border-*,
128
+ --ty-surface-*, --ty-text-*, --ty-input-{color}-*, --ty-solid-*) live
129
+ in tyrell-colors-static.css or tyrell-theme.css load one of those
130
+ alongside this file. See CSS_GUIDE.md. */
172
131
 
173
132
  /* =================================================================
174
133
  BACKGROUND COLORS
@@ -188,52 +147,13 @@ BACKGROUND COLORS
188
147
  /* Focus ring gap - matches page background for button focus ring effect */
189
148
  --ty-focus-ring-gap: #ffffff;
190
149
 
191
- /* Primary backgrounds */
192
- --ty-bg-primary: #e3eefc;
193
- --ty-bg-primary-bold: #d5e4f8;
194
- --ty-bg-primary-soft: #eff6ff;
195
-
196
- /* Success backgrounds */
197
- --ty-bg-success: #d1fae5;
198
- --ty-bg-success-bold: #a7f3d0;
199
- --ty-bg-success-soft: #ecfdf5;
200
-
201
- /* Danger backgrounds */
202
- --ty-bg-danger: #fee2e2;
203
- --ty-bg-danger-bold: #fecaca;
204
- --ty-bg-danger-soft: #fef2f2;
205
-
206
- /* Warning backgrounds */
207
- --ty-bg-warning: #fef3c7;
208
- --ty-bg-warning-bold: #fde68a;
209
- --ty-bg-warning-soft: #fffbeb;
210
-
211
- /* Neutral backgrounds */
212
- --ty-bg-neutral: #e0e0e0;
213
- --ty-bg-neutral-bold: #cecece;
214
- --ty-bg-neutral-soft: #ededed;
215
-
216
-
217
150
  /* =================================================================
218
151
  BORDER COLORS
219
152
  ================================================================= */
220
153
 
221
- --ty-border: #e5e7eb;
222
- --ty-border-bold: #d1d5db;
223
- --ty-border-strong: #6b7280;
224
- --ty-border-soft: #f3f4f6;
225
- --ty-border-faint: #fafafa;
226
-
227
154
  /* Border width — used as fallback by surface utilities (--ty-{surface}-border-width) */
228
155
  --ty-border-width: 1px;
229
156
 
230
- /* Semantic borders */
231
- --ty-border-primary: var(--ty-color-primary);
232
- --ty-border-success: var(--ty-color-success);
233
- --ty-border-danger: var(--ty-color-danger);
234
- --ty-border-warning: var(--ty-color-warning);
235
- --ty-border-neutral: var(--ty-color-neutral);
236
-
237
157
  /* =================================================================
238
158
  SCROLLBAR
239
159
  ================================================================= */
@@ -248,19 +168,11 @@ SCROLLBAR
248
168
  SURFACE SYSTEM
249
169
  ================================================================= */
250
170
 
251
- --ty-surface-canvas: #fcfcfc;
252
- --ty-surface-content: #ffffff;
253
- --ty-surface-elevated: #ffffff;
254
- --ty-surface-floating: #ffffff;
255
- --ty-surface-input: #ffffff;
256
-
257
171
  /* Surface borders — opt-in. Set color to make a surface's border visible.
258
172
  Width and style fall back to --ty-border-width and `solid` if unset. */
259
- --ty-elevated-border: #e5e7eb;
260
173
  --ty-elevated-border-width: var(--ty-border-width);
261
174
  --ty-elevated-border-style: solid;
262
175
 
263
- --ty-floating-border: #e5e7eb;
264
176
  --ty-floating-border-width: var(--ty-border-width);
265
177
  --ty-floating-border-style: solid;
266
178
 
@@ -268,12 +180,12 @@ SURFACE SYSTEM
268
180
  --ty-canvas-border-width: var(--ty-border-width);
269
181
  --ty-canvas-border-style: solid;
270
182
 
271
- --ty-content-border: #e5e7eb;
272
183
  --ty-content-border-width: var(--ty-border-width);
273
184
  --ty-content-border-style: solid;
274
185
 
275
- /* --ty-input-border is already declared above as a color token used by
276
- <ty-input> shadow DOM; .ty-input utility reuses it. Width/style still here. */
186
+ /* --ty-input-border is a color token (tyrell-colors-static.css /
187
+ tyrell-theme.css) used by <ty-input> shadow DOM and .ty-input utility.
188
+ Width/style live here. */
277
189
  --ty-input-border-width: var(--ty-border-width);
278
190
  --ty-input-border-style: solid;
279
191
 
@@ -284,17 +196,6 @@ SURFACE SYSTEM
284
196
  --ty-divide-color: var(--ty-border);
285
197
  --ty-divide-width: var(--ty-border-width);
286
198
 
287
- /* =================================================================
288
- TEXT HIERARCHY
289
- ================================================================= */
290
-
291
- /* Text hierarchy - emphasis based, not semantic */
292
- --ty-text: #111827;
293
- --ty-text-bold: #000000;
294
- --ty-text-strong: #000000;
295
- --ty-text-soft: #374151;
296
- --ty-text-faint: #9ca3af;
297
-
298
199
  /* =================================================================
299
200
  COMPONENT TOKENS
300
201
  ================================================================= */
@@ -319,87 +220,8 @@ COMPONENT TOKENS
319
220
  --ty-modal-full-height: 95vh;
320
221
 
321
222
  /* Input component tokens */
322
- --ty-input-bg: #ffffff;
323
- --ty-input-color: #111827;
324
- --ty-input-border: #e5e7eb;
325
- --ty-input-border-hover: #d1d5db;
326
- --ty-input-border-focus: var(--ty-color-primary);
327
- --ty-input-shadow-focus: rgba(59, 130, 246, 0.1);
328
- --ty-input-placeholder: #9ca3af;
329
- --ty-input-disabled-bg: #f9fafb;
330
- --ty-input-disabled-border: #e5e7eb;
331
- --ty-input-disabled-color: #9ca3af;
332
223
  --ty-label-color: #374151;
333
224
 
334
- /* Input semantic states — RESTING border for a flavored field. Soft on
335
- purpose: the full-strength color is reserved for hover/focus, so the
336
- emphasis ladder (rest → hover → focus+ring) reads like neutral's. */
337
- --ty-input-success-border: var(--ty-color-success-soft);
338
- --ty-input-danger-border: var(--ty-color-danger-soft);
339
- --ty-input-warning-border: var(--ty-color-warning-soft);
340
-
341
- /* =================================================================
342
- SOLID BUTTON FILLS — plain default values (the contract). The smart
343
- per-state derivation (hover/active/tone via OKLCH) lives in the theme
344
- engine (tyrell-theme.css), not here. hover/active alias to -strong as
345
- a simple default; a theme overrides them.
346
- ================================================================= */
347
-
348
- /* Primary */
349
- --ty-solid-primary: #4076b9;
350
- --ty-solid-primary-strong: var(--ty-color-primary-bold);
351
- --ty-solid-primary-soft: #7ea7d9;
352
- --ty-solid-primary-hover: var(--ty-solid-primary-strong);
353
- --ty-solid-primary-active: var(--ty-solid-primary-strong);
354
- /* Per-fill fg, hand-picked (max contrast, tie→white) — this file has no
355
- computed auto-contrast (that needs tyrell-theme.css's relative color
356
- support), so each fill's correct fg is a literal, verified value.
357
- Do NOT collapse back to one --ty-solid-X-fg per flavor: soft/strong
358
- sit at different lightness and several fail WCAG AA against white. */
359
- --ty-solid-primary-fg: white;
360
- --ty-solid-primary-strong-fg: white;
361
- --ty-solid-primary-soft-fg: black;
362
-
363
- /* Success */
364
- --ty-solid-success: #3bb68d;
365
- --ty-solid-success-strong: #27956e;
366
- --ty-solid-success-soft: #69b99e;
367
- --ty-solid-success-hover: var(--ty-solid-success-strong);
368
- --ty-solid-success-active: var(--ty-solid-success-strong);
369
- --ty-solid-success-fg: black;
370
- --ty-solid-success-strong-fg: black;
371
- --ty-solid-success-soft-fg: black;
372
-
373
- /* Danger */
374
- --ty-solid-danger: #df5b5b;
375
- --ty-solid-danger-strong: #cc3e3e;
376
- --ty-solid-danger-soft: #d57a7a;
377
- --ty-solid-danger-hover: var(--ty-solid-danger-strong);
378
- --ty-solid-danger-active: var(--ty-solid-danger-strong);
379
- --ty-solid-danger-fg: black;
380
- --ty-solid-danger-strong-fg: white;
381
- --ty-solid-danger-soft-fg: black;
382
-
383
- /* Warning */
384
- --ty-solid-warning: #e1a644;
385
- --ty-solid-warning-strong: #f59e0b;
386
- --ty-solid-warning-soft: #fbc56d;
387
- --ty-solid-warning-hover: var(--ty-solid-warning-strong);
388
- --ty-solid-warning-active: var(--ty-solid-warning-strong);
389
- --ty-solid-warning-fg: black;
390
- --ty-solid-warning-strong-fg: black;
391
- --ty-solid-warning-soft-fg: black;
392
-
393
- /* Neutral */
394
- --ty-solid-neutral: #414141;
395
- --ty-solid-neutral-strong: #000000;
396
- --ty-solid-neutral-soft: #6e6e6e;
397
- --ty-solid-neutral-hover: var(--ty-solid-neutral-strong);
398
- --ty-solid-neutral-active: var(--ty-solid-neutral-strong);
399
- --ty-solid-neutral-fg: white;
400
- --ty-solid-neutral-strong-fg: white;
401
- --ty-solid-neutral-soft-fg: white;
402
-
403
225
  /* =================================================================
404
226
  DESIGN SYSTEM TOKENS
405
227
  ================================================================= */
@@ -499,6 +321,39 @@ DESIGN SYSTEM TOKENS
499
321
  --ty-font-bold: 680;
500
322
  --ty-font-extrabold: 800;
501
323
 
324
+ /* Semantic weight dials — MODE-FLIPPED (see the html.dark block).
325
+ Light text on dark surfaces optically blooms (halation), so dark mode
326
+ wants genuinely lighter weights than light mode; a single fixed weight
327
+ can't be right in both. Components consume these instead of the raw
328
+ scale above:
329
+ --ty-weight-action buttons, interactive chrome
330
+ --ty-weight-label tags, chips, badges
331
+ Theme these like any other token — per :root, html.dark, a named theme
332
+ pack, or one element. The theme layer registers them as typed numbers,
333
+ so with a variable font, weight crossfades during theme transitions
334
+ along with the colors. */
335
+ --ty-weight-action: var(--ty-font-medium);
336
+ --ty-weight-label: 440;
337
+
338
+ /* Solid-button depth chrome (consumed in button.ts):
339
+ --ty-button-depth master intensity 0–1. 0 = pixel-flat (the old
340
+ look), 1 = full tactile gloss. Scales the
341
+ derived border offset, top sheen and drop
342
+ shadow together. Themable per mode / theme
343
+ pack / element like any other dial.
344
+ --ty-button-border-l L-offset of the fill-derived 1px border,
345
+ mode-flipped below: dark mode needs a LIGHTER-
346
+ than-fill hairline (solids wash out against
347
+ dark surfaces without a lit edge), light mode
348
+ a slightly darker one. */
349
+ --ty-button-depth: 0.35;
350
+ --ty-button-border-l: -0.08;
351
+ /* Neutral (ink) gets its own, stronger edge: it has no hue separating it
352
+ from the canvas, so the same offset that reads fine on colored fills
353
+ nearly vanishes on it — especially in dark mode, where the ink fill
354
+ sits close to the page. */
355
+ --ty-button-border-l-neutral: -0.25;
356
+
502
357
  --ty-line-height-none: 1;
503
358
  --ty-line-height-tight: 1.25;
504
359
  --ty-line-height-snug: 1.375;
@@ -603,46 +458,20 @@ DARK THEME OVERRIDES
603
458
 
604
459
  html.dark,
605
460
  html[data-theme="dark"] {
606
- /* =================================================================
607
- 5-VARIANT COLOR SYSTEM - DARK THEME
608
- Emphasis logic inverts: lighter = more emphasis
609
- ================================================================= */
610
-
611
- /* Primary */
612
- --ty-color-primary-strong: #9cbde5;
613
- --ty-color-primary-bold: #6c9bd5;
614
- --ty-color-primary: #4976ae;
615
- --ty-color-primary-soft: #4b698b;
616
- --ty-color-primary-faint: #445b77;
617
-
618
- /* Success */
619
- --ty-color-success-strong: #c2f0df;
620
- --ty-color-success-bold: #6ee7b7;
621
- --ty-color-success: #3aba8b;
622
- --ty-color-success-soft: #459679;
623
- --ty-color-success-faint: #1b795c;
624
-
625
- /* Danger */
626
- --ty-color-danger-strong: #ffabab;
627
- --ty-color-danger-bold: #e58787;
628
- --ty-color-danger: #d06f6f;
629
- --ty-color-danger-soft: #b06666;
630
- --ty-color-danger-faint: #aa6e6e;
631
-
632
- /* Warning */
633
- --ty-color-warning-strong: #fde68a;
634
- --ty-color-warning-bold: #fcd34d;
635
- --ty-color-warning: #fbbf24;
636
- --ty-color-warning-soft: #f59e0b;
637
- --ty-color-warning-faint: #a06726;
638
-
639
- /* Neutral */
640
- --ty-color-neutral-strong: #ffffff;
641
- --ty-color-neutral-bold: #f9fafb;
642
- --ty-color-neutral: #d6d6d6;
643
- --ty-color-neutral-soft: #696969;
644
- --ty-color-neutral-faint: #474747;
645
-
461
+ /* Weight dials flip with the mode — light-on-dark text blooms, so dark
462
+ mode runs genuinely lighter. See the :root definitions. */
463
+ --ty-weight-action: var(--ty-font-normal);
464
+ --ty-weight-label: var(--ty-font-normal);
465
+
466
+ /* Colored solid buttons: no border in dark mode — border color equals
467
+ the fill exactly, so it's geometrically present (depth 0 keeps
468
+ geometry stable) but invisible. Neutral keeps its own separate,
469
+ stronger dial (below) since its dark ink fill needs the lit edge to
470
+ read as a shape at all against a near-black canvas; colored fills
471
+ don't have that problem (their own hue/saturation already separates
472
+ them from the page), so no border reads as cleaner. */
473
+ --ty-button-border-l: 0;
474
+ --ty-button-border-l-neutral: 0.5;
646
475
 
647
476
  /* Backgrounds for dark mode */
648
477
  --ty-bg-faint: #0f1419;
@@ -654,36 +483,6 @@ Emphasis logic inverts: lighter = more emphasis
654
483
  /* Focus ring gap */
655
484
  --ty-focus-ring-gap: #1f2937;
656
485
 
657
- /* Semantic backgrounds - much darker in dark mode */
658
- --ty-bg-primary-bold: #43517a;
659
- --ty-bg-primary: #394159;
660
- --ty-bg-primary-soft: #323a4f;
661
-
662
-
663
- --ty-bg-success: #3a4442;
664
- --ty-bg-success-bold: #405752;
665
- --ty-bg-success-soft: #2f3b38;
666
-
667
- --ty-bg-danger-bold: #853535;
668
- --ty-bg-danger: #522828;
669
- --ty-bg-danger-soft: #483c3c;
670
-
671
- --ty-bg-warning-bold: #743953;
672
- --ty-bg-warning: #694555;
673
- --ty-bg-warning-soft: #45333b;
674
-
675
- --ty-bg-neutral-bold: #414141;
676
- --ty-bg-neutral: #323232;
677
- --ty-bg-neutral-soft: #242424;
678
-
679
-
680
- /* Borders for dark mode */
681
- --ty-border-strong: #8c8c8c;
682
- --ty-border-bold: #666666;
683
- --ty-border: #535353;
684
- --ty-border-soft: #1f2937;
685
- --ty-border-faint: #030712;
686
-
687
486
  /* Scrollbar - dark mode */
688
487
  --ty-scrollbar-thumb: rgba(255, 255, 255, 0.13);
689
488
  --ty-scrollbar-thumb-hover: rgba(255, 255, 255, 0.22);
@@ -691,23 +490,6 @@ Emphasis logic inverts: lighter = more emphasis
691
490
  --ty-scrollbar-track: transparent;
692
491
  --ty-scrollbar-track-hover: rgba(255, 255, 255, 0.04);
693
492
 
694
- --ty-surface-canvas: black;
695
- --ty-surface-content: #1a1a1a;
696
- --ty-surface-elevated: #282828;
697
- --ty-surface-floating: #343434;
698
- --ty-surface-input: #1f2937;
699
-
700
- --ty-content-border: #030712;
701
- --ty-elevated-border: #414141;
702
- --ty-border: #3e3e3e;
703
- --ty-floating-border: #494949;
704
-
705
- --ty-text-bold: #f9fafb;
706
- --ty-text-strong: #ffffff;
707
- --ty-text: #d6d6d6;
708
- --ty-text-soft: #7f8590;
709
- --ty-text-faint: #555a63;
710
-
711
493
  /* Shadows need to be darker/more prominent in dark mode */
712
494
  --ty-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.2);
713
495
  --ty-shadow-base:
@@ -720,68 +502,7 @@ Emphasis logic inverts: lighter = more emphasis
720
502
  0 20px 25px -5px rgba(0, 0, 0, 0.3), 0 8px 10px -6px rgba(0, 0, 0, 0.3);
721
503
  --ty-shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
722
504
 
723
- /* Solid button fills — plain dark defaults. hover/active alias -strong;
724
- theme engines override with smart per-state derivation. */
725
- --ty-solid-primary: #3e536c;
726
- --ty-solid-primary-strong: #426084;
727
- --ty-solid-primary-soft: #343f4c;
728
- --ty-solid-primary-hover: var(--ty-solid-primary-strong);
729
- --ty-solid-primary-active: var(--ty-solid-primary-strong);
730
- /* Hand-picked per-fill fg — see the light-mode comment above. Dark-mode
731
- lightness ordering differs from light (soft/strong swap direction),
732
- so these are independently verified, not mirrored. */
733
- --ty-solid-primary-fg: white;
734
- --ty-solid-primary-strong-fg: white;
735
- --ty-solid-primary-soft-fg: white;
736
-
737
-
738
- --ty-solid-success: #3bb68d;
739
- --ty-solid-success-strong: #459679;
740
- --ty-solid-success-soft: #285748;
741
- --ty-solid-success-hover: var(--ty-solid-success-strong);
742
- --ty-solid-success-active: var(--ty-solid-success-strong);
743
- --ty-solid-success-fg: black;
744
- --ty-solid-success-strong-fg: black;
745
- --ty-solid-success-soft-fg: white;
746
-
747
- --ty-solid-danger: #df5b5b;
748
- --ty-solid-danger-strong: #cc3e3e;
749
- --ty-solid-danger-soft: #875656;
750
- --ty-solid-danger-hover: var(--ty-solid-danger-strong);
751
- --ty-solid-danger-active: var(--ty-solid-danger-strong);
752
- --ty-solid-danger-fg: black;
753
- --ty-solid-danger-strong-fg: white;
754
- --ty-solid-danger-soft-fg: white;
755
-
756
- --ty-solid-warning: #e1a644;
757
- --ty-solid-warning-strong: #f59e0b;
758
- --ty-solid-warning-soft: #8b6334;
759
- --ty-solid-warning-hover: var(--ty-solid-warning-strong);
760
- --ty-solid-warning-active: var(--ty-solid-warning-strong);
761
- --ty-solid-warning-fg: black;
762
- --ty-solid-warning-strong-fg: black;
763
- --ty-solid-warning-soft-fg: white;
764
-
765
- --ty-solid-neutral: #414141;
766
- --ty-solid-neutral-strong: #4c4c4c;
767
- --ty-solid-neutral-soft: #2a2a2a;
768
- --ty-solid-neutral-hover: var(--ty-solid-neutral-strong);
769
- --ty-solid-neutral-active: var(--ty-solid-neutral-strong);
770
- --ty-solid-neutral-fg: white;
771
- --ty-solid-neutral-strong-fg: white;
772
- --ty-solid-neutral-soft-fg: white;
773
-
774
505
  /* Input component tokens - dark mode */
775
- --ty-input-bg: #1b1b1b;
776
- --ty-input-color: #f9fafb;
777
- --ty-input-border: #3a3a3a;
778
- --ty-input-border-hover: #505050;
779
- --ty-input-border-focus: var(--ty-color-primary);
780
- --ty-input-shadow-focus: rgba(96, 165, 250, 0.1);
781
- --ty-input-placeholder: #717171;
782
- --ty-input-disabled-bg: #282828;
783
- --ty-input-disabled-border: #2e2e2e;
784
- --ty-input-disabled-color: #717171;
785
506
  --ty-label-color: #d1d5db;
786
507
 
787
508
  /* Modal - dark mode */