@nebutra/design-tokens 2.0.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/css/dark.css +121 -50
- package/build/css/light.css +118 -47
- package/build/css/styles.generated.css +396 -140
- package/build/css/theme-inline.css +75 -8
- package/build/tailwind/dark.preset.cjs +121 -50
- package/build/tailwind/light.preset.cjs +118 -47
- package/build/ts/dark.d.ts +89 -2
- package/build/ts/dark.js +121 -50
- package/build/ts/light.d.ts +89 -3
- package/build/ts/light.js +118 -47
- package/package.json +1 -1
- package/style-dictionary.config.mjs +77 -9
- package/tokens/core.json +367 -17
- package/tokens/themes/dark.json +31 -29
- package/tokens/themes/light.json +26 -25
package/tokens/core.json
CHANGED
|
@@ -104,50 +104,50 @@
|
|
|
104
104
|
},
|
|
105
105
|
"nebutra-neutral": {
|
|
106
106
|
"50": {
|
|
107
|
-
"$value": "#
|
|
107
|
+
"$value": "#f9fafb",
|
|
108
108
|
"$type": "color"
|
|
109
109
|
},
|
|
110
110
|
"100": {
|
|
111
|
-
"$value": "#
|
|
111
|
+
"$value": "#f3f4f6",
|
|
112
112
|
"$type": "color"
|
|
113
113
|
},
|
|
114
114
|
"200": {
|
|
115
|
-
"$value": "#
|
|
115
|
+
"$value": "#e4e5e8",
|
|
116
116
|
"$type": "color"
|
|
117
117
|
},
|
|
118
118
|
"300": {
|
|
119
|
-
"$value": "#
|
|
119
|
+
"$value": "#d2d4d8",
|
|
120
120
|
"$type": "color"
|
|
121
121
|
},
|
|
122
122
|
"400": {
|
|
123
|
-
"$value": "#
|
|
123
|
+
"$value": "#9fa1a5",
|
|
124
124
|
"$type": "color"
|
|
125
125
|
},
|
|
126
126
|
"500": {
|
|
127
|
-
"$value": "#
|
|
127
|
+
"$value": "#717377",
|
|
128
128
|
"$type": "color"
|
|
129
129
|
},
|
|
130
130
|
"600": {
|
|
131
|
-
"$value": "#
|
|
131
|
+
"$value": "#515357",
|
|
132
132
|
"$type": "color"
|
|
133
133
|
},
|
|
134
134
|
"700": {
|
|
135
|
-
"$value": "#
|
|
135
|
+
"$value": "#3f4044",
|
|
136
136
|
"$type": "color"
|
|
137
137
|
},
|
|
138
138
|
"800": {
|
|
139
|
-
"$value": "#
|
|
139
|
+
"$value": "#26272a",
|
|
140
140
|
"$type": "color"
|
|
141
141
|
},
|
|
142
142
|
"900": {
|
|
143
|
-
"$value": "#
|
|
143
|
+
"$value": "#18191c",
|
|
144
144
|
"$type": "color"
|
|
145
145
|
},
|
|
146
146
|
"950": {
|
|
147
|
-
"$value": "#
|
|
147
|
+
"$value": "#0b0c0d",
|
|
148
148
|
"$type": "color"
|
|
149
149
|
},
|
|
150
|
-
"$description": "
|
|
150
|
+
"$description": "House gray — OKLCH hue 264 (the VI hue), chroma 0.002–0.007, lightness steps of Tailwind v4 neutral. Near-achromatic on purpose: every measured reference (Linear C 0.003, Vercel C 0, Mistral/Deel C 0.003–0.03) keeps grays almost colourless, and the previous Slate (C up to 0.04, hue 257) read as the stock shadcn template. Replaces Slate 2026-09-24."
|
|
151
151
|
},
|
|
152
152
|
"nebutra-gray": {
|
|
153
153
|
"50": {
|
|
@@ -387,6 +387,11 @@
|
|
|
387
387
|
"$value": "-0.015em",
|
|
388
388
|
"$type": "string",
|
|
389
389
|
"$description": "Body emphasis"
|
|
390
|
+
},
|
|
391
|
+
"label": {
|
|
392
|
+
"$value": "0.07em",
|
|
393
|
+
"$type": "string",
|
|
394
|
+
"$description": "Uppercase micro-labels. 0.07em is Vercel's measured eyebrow value (0.071em); open tracking keeps small caps legible."
|
|
390
395
|
}
|
|
391
396
|
},
|
|
392
397
|
"leading": {
|
|
@@ -400,6 +405,351 @@
|
|
|
400
405
|
"$type": "string"
|
|
401
406
|
}
|
|
402
407
|
},
|
|
408
|
+
"type": {
|
|
409
|
+
"$description": "Type scale — size, line-height and tracking travel together, so text-2xl alone is a finished heading. Sizes keep Tailwind's names and values (1,900+ call sites keep their size); what changes is that every step now carries its own leading and a tracking curve: slightly open below 14px, neutral at 13–14, tightening to -0.045em at display sizes. Curve measured across Cursor (+0.01em@14 → -0.03em@72), Linear (-0.022em@48–72) and Vercel (-0.06em@64). Emitted as --type-<step>-size|leading|tracking and wired into Tailwind --text-* indirectly, so a Brand Package can retune the scale. Role aliases (display, body, label, meta) name the four sizes a product surface needs and point at steps, so an app caps its ladder by role without declaring a private scale (PARA did, and tailwind-merge dropped its sizes).",
|
|
410
|
+
"2xs": {
|
|
411
|
+
"size": {
|
|
412
|
+
"$value": "0.6875rem",
|
|
413
|
+
"$type": "string"
|
|
414
|
+
},
|
|
415
|
+
"leading": {
|
|
416
|
+
"$value": "1.45",
|
|
417
|
+
"$type": "string"
|
|
418
|
+
},
|
|
419
|
+
"tracking": {
|
|
420
|
+
"$value": "0.01em",
|
|
421
|
+
"$type": "string"
|
|
422
|
+
},
|
|
423
|
+
"$description": "New. Micro captions and badges, replacing the 9–11px arbitrary sizes."
|
|
424
|
+
},
|
|
425
|
+
"xs": {
|
|
426
|
+
"size": {
|
|
427
|
+
"$value": "0.75rem",
|
|
428
|
+
"$type": "string"
|
|
429
|
+
},
|
|
430
|
+
"leading": {
|
|
431
|
+
"$value": "1.4",
|
|
432
|
+
"$type": "string"
|
|
433
|
+
},
|
|
434
|
+
"tracking": {
|
|
435
|
+
"$value": "0.005em",
|
|
436
|
+
"$type": "string"
|
|
437
|
+
}
|
|
438
|
+
},
|
|
439
|
+
"ui": {
|
|
440
|
+
"size": {
|
|
441
|
+
"$value": "0.8125rem",
|
|
442
|
+
"$type": "string"
|
|
443
|
+
},
|
|
444
|
+
"leading": {
|
|
445
|
+
"$value": "1.45",
|
|
446
|
+
"$type": "string"
|
|
447
|
+
},
|
|
448
|
+
"tracking": {
|
|
449
|
+
"$value": "0em",
|
|
450
|
+
"$type": "string"
|
|
451
|
+
},
|
|
452
|
+
"$description": "New. Dense product UI — table cells, sidebar rows, controls (Linear's caption step)."
|
|
453
|
+
},
|
|
454
|
+
"sm": {
|
|
455
|
+
"size": {
|
|
456
|
+
"$value": "0.875rem",
|
|
457
|
+
"$type": "string"
|
|
458
|
+
},
|
|
459
|
+
"leading": {
|
|
460
|
+
"$value": "1.5",
|
|
461
|
+
"$type": "string"
|
|
462
|
+
},
|
|
463
|
+
"tracking": {
|
|
464
|
+
"$value": "0em",
|
|
465
|
+
"$type": "string"
|
|
466
|
+
},
|
|
467
|
+
"$description": "Product body. 1.5 rather than Tailwind's 1.43 so CJK lines do not crowd."
|
|
468
|
+
},
|
|
469
|
+
"base": {
|
|
470
|
+
"size": {
|
|
471
|
+
"$value": "1rem",
|
|
472
|
+
"$type": "string"
|
|
473
|
+
},
|
|
474
|
+
"leading": {
|
|
475
|
+
"$value": "1.6",
|
|
476
|
+
"$type": "string"
|
|
477
|
+
},
|
|
478
|
+
"tracking": {
|
|
479
|
+
"$value": "-0.005em",
|
|
480
|
+
"$type": "string"
|
|
481
|
+
},
|
|
482
|
+
"$description": "Marketing and reading body."
|
|
483
|
+
},
|
|
484
|
+
"lg": {
|
|
485
|
+
"size": {
|
|
486
|
+
"$value": "1.125rem",
|
|
487
|
+
"$type": "string"
|
|
488
|
+
},
|
|
489
|
+
"leading": {
|
|
490
|
+
"$value": "1.55",
|
|
491
|
+
"$type": "string"
|
|
492
|
+
},
|
|
493
|
+
"tracking": {
|
|
494
|
+
"$value": "-0.01em",
|
|
495
|
+
"$type": "string"
|
|
496
|
+
}
|
|
497
|
+
},
|
|
498
|
+
"xl": {
|
|
499
|
+
"size": {
|
|
500
|
+
"$value": "1.25rem",
|
|
501
|
+
"$type": "string"
|
|
502
|
+
},
|
|
503
|
+
"leading": {
|
|
504
|
+
"$value": "1.45",
|
|
505
|
+
"$type": "string"
|
|
506
|
+
},
|
|
507
|
+
"tracking": {
|
|
508
|
+
"$value": "-0.012em",
|
|
509
|
+
"$type": "string"
|
|
510
|
+
}
|
|
511
|
+
},
|
|
512
|
+
"2xl": {
|
|
513
|
+
"size": {
|
|
514
|
+
"$value": "1.5rem",
|
|
515
|
+
"$type": "string"
|
|
516
|
+
},
|
|
517
|
+
"leading": {
|
|
518
|
+
"$value": "1.33",
|
|
519
|
+
"$type": "string"
|
|
520
|
+
},
|
|
521
|
+
"tracking": {
|
|
522
|
+
"$value": "-0.015em",
|
|
523
|
+
"$type": "string"
|
|
524
|
+
}
|
|
525
|
+
},
|
|
526
|
+
"3xl": {
|
|
527
|
+
"size": {
|
|
528
|
+
"$value": "1.875rem",
|
|
529
|
+
"$type": "string"
|
|
530
|
+
},
|
|
531
|
+
"leading": {
|
|
532
|
+
"$value": "1.25",
|
|
533
|
+
"$type": "string"
|
|
534
|
+
},
|
|
535
|
+
"tracking": {
|
|
536
|
+
"$value": "-0.02em",
|
|
537
|
+
"$type": "string"
|
|
538
|
+
}
|
|
539
|
+
},
|
|
540
|
+
"4xl": {
|
|
541
|
+
"size": {
|
|
542
|
+
"$value": "2.25rem",
|
|
543
|
+
"$type": "string"
|
|
544
|
+
},
|
|
545
|
+
"leading": {
|
|
546
|
+
"$value": "1.15",
|
|
547
|
+
"$type": "string"
|
|
548
|
+
},
|
|
549
|
+
"tracking": {
|
|
550
|
+
"$value": "-0.022em",
|
|
551
|
+
"$type": "string"
|
|
552
|
+
}
|
|
553
|
+
},
|
|
554
|
+
"5xl": {
|
|
555
|
+
"size": {
|
|
556
|
+
"$value": "3rem",
|
|
557
|
+
"$type": "string"
|
|
558
|
+
},
|
|
559
|
+
"leading": {
|
|
560
|
+
"$value": "1.08",
|
|
561
|
+
"$type": "string"
|
|
562
|
+
},
|
|
563
|
+
"tracking": {
|
|
564
|
+
"$value": "-0.028em",
|
|
565
|
+
"$type": "string"
|
|
566
|
+
}
|
|
567
|
+
},
|
|
568
|
+
"6xl": {
|
|
569
|
+
"size": {
|
|
570
|
+
"$value": "3.75rem",
|
|
571
|
+
"$type": "string"
|
|
572
|
+
},
|
|
573
|
+
"leading": {
|
|
574
|
+
"$value": "1.04",
|
|
575
|
+
"$type": "string"
|
|
576
|
+
},
|
|
577
|
+
"tracking": {
|
|
578
|
+
"$value": "-0.032em",
|
|
579
|
+
"$type": "string"
|
|
580
|
+
}
|
|
581
|
+
},
|
|
582
|
+
"7xl": {
|
|
583
|
+
"size": {
|
|
584
|
+
"$value": "4.5rem",
|
|
585
|
+
"$type": "string"
|
|
586
|
+
},
|
|
587
|
+
"leading": {
|
|
588
|
+
"$value": "1",
|
|
589
|
+
"$type": "string"
|
|
590
|
+
},
|
|
591
|
+
"tracking": {
|
|
592
|
+
"$value": "-0.035em",
|
|
593
|
+
"$type": "string"
|
|
594
|
+
}
|
|
595
|
+
},
|
|
596
|
+
"8xl": {
|
|
597
|
+
"size": {
|
|
598
|
+
"$value": "6rem",
|
|
599
|
+
"$type": "string"
|
|
600
|
+
},
|
|
601
|
+
"leading": {
|
|
602
|
+
"$value": "1",
|
|
603
|
+
"$type": "string"
|
|
604
|
+
},
|
|
605
|
+
"tracking": {
|
|
606
|
+
"$value": "-0.04em",
|
|
607
|
+
"$type": "string"
|
|
608
|
+
}
|
|
609
|
+
},
|
|
610
|
+
"9xl": {
|
|
611
|
+
"size": {
|
|
612
|
+
"$value": "8rem",
|
|
613
|
+
"$type": "string"
|
|
614
|
+
},
|
|
615
|
+
"leading": {
|
|
616
|
+
"$value": "1",
|
|
617
|
+
"$type": "string"
|
|
618
|
+
},
|
|
619
|
+
"tracking": {
|
|
620
|
+
"$value": "-0.045em",
|
|
621
|
+
"$type": "string"
|
|
622
|
+
}
|
|
623
|
+
},
|
|
624
|
+
"display": {
|
|
625
|
+
"$description": "Role alias for type.xl. Dialog and empty-state headlines — the top of a product surface's ladder, not a hero.",
|
|
626
|
+
"size": {
|
|
627
|
+
"$value": "{type.xl.size}",
|
|
628
|
+
"$type": "string"
|
|
629
|
+
},
|
|
630
|
+
"leading": {
|
|
631
|
+
"$value": "{type.xl.leading}",
|
|
632
|
+
"$type": "string"
|
|
633
|
+
},
|
|
634
|
+
"tracking": {
|
|
635
|
+
"$value": "{type.xl.tracking}",
|
|
636
|
+
"$type": "string"
|
|
637
|
+
}
|
|
638
|
+
},
|
|
639
|
+
"body": {
|
|
640
|
+
"$description": "Role alias for type.sm. Product body copy.",
|
|
641
|
+
"size": {
|
|
642
|
+
"$value": "{type.sm.size}",
|
|
643
|
+
"$type": "string"
|
|
644
|
+
},
|
|
645
|
+
"leading": {
|
|
646
|
+
"$value": "{type.sm.leading}",
|
|
647
|
+
"$type": "string"
|
|
648
|
+
},
|
|
649
|
+
"tracking": {
|
|
650
|
+
"$value": "{type.sm.tracking}",
|
|
651
|
+
"$type": "string"
|
|
652
|
+
}
|
|
653
|
+
},
|
|
654
|
+
"label": {
|
|
655
|
+
"$description": "Role alias for type.xs. Control labels, table headers, secondary UI.",
|
|
656
|
+
"size": {
|
|
657
|
+
"$value": "{type.xs.size}",
|
|
658
|
+
"$type": "string"
|
|
659
|
+
},
|
|
660
|
+
"leading": {
|
|
661
|
+
"$value": "{type.xs.leading}",
|
|
662
|
+
"$type": "string"
|
|
663
|
+
},
|
|
664
|
+
"tracking": {
|
|
665
|
+
"$value": "{type.xs.tracking}",
|
|
666
|
+
"$type": "string"
|
|
667
|
+
}
|
|
668
|
+
},
|
|
669
|
+
"meta": {
|
|
670
|
+
"$description": "Role alias for type.2xs. Machine facts only: dimensions, cost, zoom %, timestamps, key hints.",
|
|
671
|
+
"size": {
|
|
672
|
+
"$value": "{type.2xs.size}",
|
|
673
|
+
"$type": "string"
|
|
674
|
+
},
|
|
675
|
+
"leading": {
|
|
676
|
+
"$value": "{type.2xs.leading}",
|
|
677
|
+
"$type": "string"
|
|
678
|
+
},
|
|
679
|
+
"tracking": {
|
|
680
|
+
"$value": "{type.2xs.tracking}",
|
|
681
|
+
"$type": "string"
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
},
|
|
685
|
+
"layer": {
|
|
686
|
+
"$description": "Stacking roles. One ladder for the whole repo so a layer is chosen by what it is, not by picking a number: before this, apps invented 60 / 90 / 100 / 200 independently and nothing said which sat above which. Page chrome lives below 1000, overlays at 1040–1070 with 100–1039 kept empty. Use as z-[var(--layer-<role>)].",
|
|
687
|
+
"raised": {
|
|
688
|
+
"$value": "10",
|
|
689
|
+
"$type": "string",
|
|
690
|
+
"$description": "Within a component: an element lifted over its siblings."
|
|
691
|
+
},
|
|
692
|
+
"sticky": {
|
|
693
|
+
"$value": "20",
|
|
694
|
+
"$type": "string",
|
|
695
|
+
"$description": "Sticky headers and table heads."
|
|
696
|
+
},
|
|
697
|
+
"floating": {
|
|
698
|
+
"$value": "30",
|
|
699
|
+
"$type": "string",
|
|
700
|
+
"$description": "Floating toolbars and canvas chrome anchored to content."
|
|
701
|
+
},
|
|
702
|
+
"nav": {
|
|
703
|
+
"$value": "40",
|
|
704
|
+
"$type": "string",
|
|
705
|
+
"$description": "App navigation and the shell's top bar."
|
|
706
|
+
},
|
|
707
|
+
"drawer": {
|
|
708
|
+
"$value": "60",
|
|
709
|
+
"$type": "string",
|
|
710
|
+
"$description": "Mobile navigation drawers and their toggles."
|
|
711
|
+
},
|
|
712
|
+
"banner": {
|
|
713
|
+
"$value": "90",
|
|
714
|
+
"$type": "string",
|
|
715
|
+
"$description": "Page-level banners: cookie consent, announcements."
|
|
716
|
+
},
|
|
717
|
+
"skip-link": {
|
|
718
|
+
"$value": "100",
|
|
719
|
+
"$type": "string",
|
|
720
|
+
"$description": "The skip link — above page chrome whenever it is focused."
|
|
721
|
+
},
|
|
722
|
+
"panel": {
|
|
723
|
+
"$value": "200",
|
|
724
|
+
"$type": "string",
|
|
725
|
+
"$description": "App-owned floating panels that are not overlays (locale switcher, search flyouts)."
|
|
726
|
+
},
|
|
727
|
+
"backdrop": {
|
|
728
|
+
"$value": "1040",
|
|
729
|
+
"$type": "string",
|
|
730
|
+
"$description": "Overlay tier. Mirrors overlayZIndex in @nebutra/ui; a test keeps them equal."
|
|
731
|
+
},
|
|
732
|
+
"modal": {
|
|
733
|
+
"$value": "1050",
|
|
734
|
+
"$type": "string",
|
|
735
|
+
"$description": "Dialogs and sheets."
|
|
736
|
+
},
|
|
737
|
+
"popover": {
|
|
738
|
+
"$value": "1060",
|
|
739
|
+
"$type": "string",
|
|
740
|
+
"$description": "Popovers, menus, selects."
|
|
741
|
+
},
|
|
742
|
+
"tooltip": {
|
|
743
|
+
"$value": "1070",
|
|
744
|
+
"$type": "string",
|
|
745
|
+
"$description": "Tooltips."
|
|
746
|
+
},
|
|
747
|
+
"devtools": {
|
|
748
|
+
"$value": "9999",
|
|
749
|
+
"$type": "string",
|
|
750
|
+
"$description": "Developer and debug surfaces only — never product UI."
|
|
751
|
+
}
|
|
752
|
+
},
|
|
403
753
|
"ring": {
|
|
404
754
|
"$description": "Inset ring shorthand recipes — replaces shadow-2xl elevation per 2026 convention.",
|
|
405
755
|
"hairline": {
|
|
@@ -417,22 +767,22 @@
|
|
|
417
767
|
}
|
|
418
768
|
},
|
|
419
769
|
"fontFamily": {
|
|
420
|
-
"$description": "Geist + Geist Mono for Latin, self-hosted
|
|
770
|
+
"$description": "Geist + Geist Mono for Latin body/UI, DM Sans (self-hosted, SIL OFL) for Latin display and headings, self-hosted MiSans (Xiaomi, free commercial use with attribution) for CJK, system CJK faces as the fallback behind it. Chosen 2026-09-25 by measuring what competitors ship: MiniMax and Moonshot set Chinese in MiSans; DeepSeek and Databricks set Latin in DM Sans. Chinese serifs were tried and rejected. ORDER IS THE DESIGN DECISION: the Latin face comes first so it keeps Latin and the numerals; MiSans follows so only CJK falls through to it (its @font-face unicode-range carries no Latin either). Each stack prefixes the next/font variable so the loaded face wins over the literal family name; the MiSans entry carries a literal fallback inside var() so a surface that never applies cjkFontClassName degrades to the family name instead of voiding the declaration. `cn` is kept because the `font-cn` utility and the `html:lang(zh|ja|ko) body` rule in static/base.css set font-family to it alone (they exist for CJK line-height / word-break metrics).",
|
|
421
771
|
"sans": {
|
|
422
|
-
"$value": "var(--font-geist-sans), \"Geist\", var(--font-
|
|
772
|
+
"$value": "var(--font-geist-sans), \"Geist\", var(--font-misans, \"MiSans\"), \"PingFang SC\", \"Microsoft YaHei\", -apple-system, BlinkMacSystemFont, system-ui, sans-serif",
|
|
423
773
|
"$type": "fontFamily"
|
|
424
774
|
},
|
|
425
775
|
"cn": {
|
|
426
|
-
"$value": "var(--font-geist-sans), \"Geist\", var(--font-
|
|
776
|
+
"$value": "var(--font-geist-sans), \"Geist\", var(--font-misans, \"MiSans\"), \"PingFang SC\", \"Microsoft YaHei\", sans-serif",
|
|
427
777
|
"$type": "fontFamily",
|
|
428
778
|
"$description": "CJK-locale stack — same order as sans, minus the Latin-only system faces"
|
|
429
779
|
},
|
|
430
780
|
"display": {
|
|
431
|
-
"$value": "var(--font-
|
|
781
|
+
"$value": "var(--font-dm-sans), \"DM Sans\", var(--font-misans, \"MiSans\"), \"PingFang SC\", sans-serif",
|
|
432
782
|
"$type": "fontFamily"
|
|
433
783
|
},
|
|
434
784
|
"heading": {
|
|
435
|
-
"$value": "var(--font-
|
|
785
|
+
"$value": "var(--font-dm-sans), \"DM Sans\", var(--font-misans, \"MiSans\"), \"PingFang SC\", sans-serif",
|
|
436
786
|
"$type": "fontFamily"
|
|
437
787
|
},
|
|
438
788
|
"mono": {
|
package/tokens/themes/dark.json
CHANGED
|
@@ -283,61 +283,62 @@
|
|
|
283
283
|
},
|
|
284
284
|
"shadcn": {
|
|
285
285
|
"background": {
|
|
286
|
-
"$value": "
|
|
287
|
-
"$type": "string"
|
|
286
|
+
"$value": "220 11.1% 5.3%",
|
|
287
|
+
"$type": "string",
|
|
288
|
+
"$description": "House canvas. Light is gray-50 under white cards (two-surface layering, as Vercel #fafafa/#fff); dark is OKLCH L 0.16, inside the near-black band every reference measures (Linear L 0.14, Raycast #040506)."
|
|
288
289
|
},
|
|
289
290
|
"foreground": {
|
|
290
|
-
"$value": "
|
|
291
|
+
"$value": "228 23.8% 95.9%",
|
|
291
292
|
"$type": "string"
|
|
292
293
|
},
|
|
293
294
|
"card": {
|
|
294
|
-
"$value": "
|
|
295
|
+
"$value": "220 7.3% 8%",
|
|
295
296
|
"$type": "string"
|
|
296
297
|
},
|
|
297
298
|
"card-foreground": {
|
|
298
|
-
"$value": "
|
|
299
|
+
"$value": "228 23.8% 95.9%",
|
|
299
300
|
"$type": "string"
|
|
300
301
|
},
|
|
301
302
|
"popover": {
|
|
302
|
-
"$value": "
|
|
303
|
+
"$value": "225 7.7% 10.2%",
|
|
303
304
|
"$type": "string"
|
|
304
305
|
},
|
|
305
306
|
"popover-foreground": {
|
|
306
|
-
"$value": "
|
|
307
|
+
"$value": "228 23.8% 95.9%",
|
|
307
308
|
"$type": "string"
|
|
308
309
|
},
|
|
309
310
|
"primary": {
|
|
310
|
-
"$value": "
|
|
311
|
+
"$value": "228 23.8% 95.9%",
|
|
311
312
|
"$type": "string",
|
|
312
|
-
"$description": "
|
|
313
|
+
"$description": "House action fill = ink, not blue (owner decision 2026-09-24). Every measured reference ships a solid near-black primary (Vercel #171717, Figma #000) and keeps its one saturated hue for a single signal. Blue now lives on --ring (focus, selection) only."
|
|
313
314
|
},
|
|
314
315
|
"primary-foreground": {
|
|
315
|
-
"$value": "
|
|
316
|
+
"$value": "220 11.1% 5.3%",
|
|
316
317
|
"$type": "string",
|
|
317
318
|
"$description": "White, matching light mode and matching --blue-contrast. It was near-black (222 14% 9%) when --primary was a LIGHT fill at L* 68.3, where dark ink read 6.20:1. Once --primary became a deep fill at L* 55.9 the pairing inverted and measured 3.74:1, below AA — the fill moved and the ink did not. The deep-fill tier takes white in both modes; --blue-contrast says the same thing, and they must agree because --primary and --blue-9 are now the same value."
|
|
318
319
|
},
|
|
319
320
|
"secondary": {
|
|
320
|
-
"$value": "
|
|
321
|
+
"$value": "225 6.2% 12.5%",
|
|
321
322
|
"$type": "string"
|
|
322
323
|
},
|
|
323
324
|
"secondary-foreground": {
|
|
324
|
-
"$value": "
|
|
325
|
+
"$value": "228 23.8% 95.9%",
|
|
325
326
|
"$type": "string"
|
|
326
327
|
},
|
|
327
328
|
"muted": {
|
|
328
|
-
"$value": "
|
|
329
|
+
"$value": "225 6.2% 12.5%",
|
|
329
330
|
"$type": "string"
|
|
330
331
|
},
|
|
331
332
|
"muted-foreground": {
|
|
332
|
-
"$value": "
|
|
333
|
+
"$value": "228 2.6% 62.5%",
|
|
333
334
|
"$type": "string"
|
|
334
335
|
},
|
|
335
336
|
"accent": {
|
|
336
|
-
"$value": "
|
|
337
|
+
"$value": "225 6.2% 12.5%",
|
|
337
338
|
"$type": "string"
|
|
338
339
|
},
|
|
339
340
|
"accent-foreground": {
|
|
340
|
-
"$value": "228
|
|
341
|
+
"$value": "228 23.8% 95.9%",
|
|
341
342
|
"$type": "string"
|
|
342
343
|
},
|
|
343
344
|
"destructive": {
|
|
@@ -388,48 +389,49 @@
|
|
|
388
389
|
"$type": "string"
|
|
389
390
|
},
|
|
390
391
|
"border": {
|
|
391
|
-
"$value": "220
|
|
392
|
+
"$value": "220 3.6% 16.3%",
|
|
392
393
|
"$type": "string"
|
|
393
394
|
},
|
|
394
395
|
"input": {
|
|
395
|
-
"$value": "220
|
|
396
|
+
"$value": "220 3.6% 16.3%",
|
|
396
397
|
"$type": "string"
|
|
397
398
|
},
|
|
398
399
|
"ring": {
|
|
399
|
-
"$value": "
|
|
400
|
+
"$value": "222.6 87.3% 69%",
|
|
400
401
|
"$type": "string",
|
|
401
|
-
"$description": "Focus
|
|
402
|
+
"$description": "The House blue. Focus rings, selection and links — the one saturated hue on a product screen. #2e65ee light / #6b93f5 dark."
|
|
402
403
|
},
|
|
403
404
|
"sidebar": {
|
|
404
|
-
"$value": "
|
|
405
|
+
"$value": "220 11.1% 5.3%",
|
|
405
406
|
"$type": "string"
|
|
406
407
|
},
|
|
407
408
|
"sidebar-foreground": {
|
|
408
|
-
"$value": "
|
|
409
|
+
"$value": "228 23.8% 95.9%",
|
|
409
410
|
"$type": "string"
|
|
410
411
|
},
|
|
411
412
|
"sidebar-primary": {
|
|
412
|
-
"$value": "228
|
|
413
|
-
"$type": "string"
|
|
413
|
+
"$value": "228 23.8% 95.9%",
|
|
414
|
+
"$type": "string",
|
|
415
|
+
"$description": "Current-page accent in the sidebar. = blue-11 (#89aaee, L* 74.0, C 0.106), the ramp's measured secondary-text tier on dark (8.62:1 on step 1). Was 228 95% 72% — 95% chroma sat outside every measured band and matched no ramp step."
|
|
414
416
|
},
|
|
415
417
|
"sidebar-primary-foreground": {
|
|
416
|
-
"$value": "
|
|
418
|
+
"$value": "220 11.1% 5.3%",
|
|
417
419
|
"$type": "string"
|
|
418
420
|
},
|
|
419
421
|
"sidebar-accent": {
|
|
420
|
-
"$value": "
|
|
422
|
+
"$value": "225 6.2% 12.5%",
|
|
421
423
|
"$type": "string"
|
|
422
424
|
},
|
|
423
425
|
"sidebar-accent-foreground": {
|
|
424
|
-
"$value": "228
|
|
426
|
+
"$value": "228 23.8% 95.9%",
|
|
425
427
|
"$type": "string"
|
|
426
428
|
},
|
|
427
429
|
"sidebar-border": {
|
|
428
|
-
"$value": "
|
|
430
|
+
"$value": "225 6.2% 12.5%",
|
|
429
431
|
"$type": "string"
|
|
430
432
|
},
|
|
431
433
|
"sidebar-ring": {
|
|
432
|
-
"$value": "
|
|
434
|
+
"$value": "222.6 87.3% 69%",
|
|
433
435
|
"$type": "string"
|
|
434
436
|
},
|
|
435
437
|
"chart-1": {
|