@snksergio/design-system 0.1.0 → 0.4.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/README.md +34 -1
- package/dist-lib/chunks/{app-shell-BNTvOETJ.mjs → app-shell-BdVam01i.cjs} +55 -55
- package/dist-lib/chunks/app-shell-BdVam01i.cjs.map +1 -0
- package/dist-lib/chunks/{app-shell-CDy42aNI.mjs → app-shell-C_enrPD8.mjs} +86 -86
- package/dist-lib/chunks/app-shell-C_enrPD8.mjs.map +1 -0
- package/dist-lib/chunks/{app-shell-mocks-oO_IV3Gw.mjs → app-shell-mocks-oO_IV3Gw.cjs} +1 -1
- package/dist-lib/chunks/{app-shell-mocks-oO_IV3Gw.mjs.map → app-shell-mocks-oO_IV3Gw.cjs.map} +1 -1
- package/dist-lib/chunks/{badge-B_2Zt52o.mjs → badge-B0D_PRxn.mjs} +10 -10
- package/dist-lib/chunks/badge-B0D_PRxn.mjs.map +1 -0
- package/dist-lib/chunks/{badge-DKpXURa1.mjs → badge-CUttkO1X.cjs} +10 -10
- package/dist-lib/chunks/badge-CUttkO1X.cjs.map +1 -0
- package/dist-lib/chunks/{chat-v2-mocks-BV9Wha_Z.mjs → chat-v2-mocks-BV9Wha_Z.cjs} +1 -1
- package/dist-lib/chunks/{chat-v2-mocks-BV9Wha_Z.mjs.map → chat-v2-mocks-BV9Wha_Z.cjs.map} +1 -1
- package/dist-lib/chunks/{chip-group-CsKBBHW2.mjs → chip-group-2-f_Yo7Y.cjs} +31 -64
- package/dist-lib/chunks/chip-group-2-f_Yo7Y.cjs.map +1 -0
- package/dist-lib/chunks/{chip-group-D3D0i72q.mjs → chip-group-_e-yh1Zq.mjs} +31 -64
- package/dist-lib/chunks/chip-group-_e-yh1Zq.mjs.map +1 -0
- package/dist-lib/chunks/{clientes-showcase-mocks-BMfbNNJh.mjs → clientes-showcase-mocks-CPNOhx1G.cjs} +3 -3
- package/dist-lib/chunks/clientes-showcase-mocks-CPNOhx1G.cjs.map +1 -0
- package/dist-lib/chunks/{clientes-showcase-mocks-Cq9u3nGZ.mjs → clientes-showcase-mocks-DEHCKxMK.mjs} +3 -3
- package/dist-lib/chunks/clientes-showcase-mocks-DEHCKxMK.mjs.map +1 -0
- package/dist-lib/chunks/{input-374MpdBL.mjs → input-BWevV7up.cjs} +3 -3
- package/dist-lib/chunks/input-BWevV7up.cjs.map +1 -0
- package/dist-lib/chunks/{input-DF4XAWmr.mjs → input-C9eKSSEb.mjs} +3 -3
- package/dist-lib/chunks/input-C9eKSSEb.mjs.map +1 -0
- package/dist-lib/chunks/{page-header-mC1gGtOI.mjs → page-header-DM2G1mdi.mjs} +3 -3
- package/dist-lib/chunks/page-header-DM2G1mdi.mjs.map +1 -0
- package/dist-lib/chunks/{page-header-Dw-3wqAG.mjs → page-header-qOywgRWy.cjs} +3 -3
- package/dist-lib/chunks/page-header-qOywgRWy.cjs.map +1 -0
- package/dist-lib/chunks/{panel-bzNmFlEZ.mjs → panel-CjfnpA-4.cjs} +532 -244
- package/dist-lib/chunks/panel-CjfnpA-4.cjs.map +1 -0
- package/dist-lib/chunks/{panel-Ds15whqp.mjs → panel-DZ7X1NZV.mjs} +547 -259
- package/dist-lib/chunks/panel-DZ7X1NZV.mjs.map +1 -0
- package/dist-lib/chunks/{useTheme-Dee4mo-A.mjs → useTheme-Dee4mo-A.cjs} +1 -1
- package/dist-lib/chunks/{useTheme-Dee4mo-A.mjs.map → useTheme-Dee4mo-A.cjs.map} +1 -1
- package/dist-lib/index.cjs +23 -76
- package/dist-lib/index.cjs.map +1 -1
- package/dist-lib/index.mjs +89 -142
- package/dist-lib/index.mjs.map +1 -1
- package/dist-lib/preview/chat.cjs +38 -39
- package/dist-lib/preview/chat.cjs.map +1 -1
- package/dist-lib/preview/chat.mjs +35 -36
- package/dist-lib/preview/chat.mjs.map +1 -1
- package/dist-lib/preview/clientes.cjs +22 -22
- package/dist-lib/preview/clientes.cjs.map +1 -1
- package/dist-lib/preview/clientes.mjs +20 -20
- package/dist-lib/preview/clientes.mjs.map +1 -1
- package/dist-lib/preview/dashboard.cjs +40 -40
- package/dist-lib/preview/dashboard.cjs.map +1 -1
- package/dist-lib/preview/dashboard.mjs +38 -38
- package/dist-lib/preview/dashboard.mjs.map +1 -1
- package/dist-lib/preview/mocks.cjs +3 -3
- package/dist-lib/preview/mocks.mjs +1 -1
- package/dist-lib/theme.css +18 -122
- package/dist-lib/tokens.cjs +24 -160
- package/dist-lib/tokens.cjs.map +1 -1
- package/dist-lib/tokens.mjs +24 -160
- package/dist-lib/tokens.mjs.map +1 -1
- package/package.json +142 -142
- package/dist-lib/chunks/app-shell-BNTvOETJ.mjs.map +0 -1
- package/dist-lib/chunks/app-shell-CDy42aNI.mjs.map +0 -1
- package/dist-lib/chunks/badge-B_2Zt52o.mjs.map +0 -1
- package/dist-lib/chunks/badge-DKpXURa1.mjs.map +0 -1
- package/dist-lib/chunks/chip-group-CsKBBHW2.mjs.map +0 -1
- package/dist-lib/chunks/chip-group-D3D0i72q.mjs.map +0 -1
- package/dist-lib/chunks/clientes-showcase-mocks-BMfbNNJh.mjs.map +0 -1
- package/dist-lib/chunks/clientes-showcase-mocks-Cq9u3nGZ.mjs.map +0 -1
- package/dist-lib/chunks/input-374MpdBL.mjs.map +0 -1
- package/dist-lib/chunks/input-DF4XAWmr.mjs.map +0 -1
- package/dist-lib/chunks/page-header-Dw-3wqAG.mjs.map +0 -1
- package/dist-lib/chunks/page-header-mC1gGtOI.mjs.map +0 -1
- package/dist-lib/chunks/panel-Ds15whqp.mjs.map +0 -1
- package/dist-lib/chunks/panel-bzNmFlEZ.mjs.map +0 -1
package/dist-lib/tokens.mjs
CHANGED
|
@@ -569,8 +569,6 @@ const heading = {
|
|
|
569
569
|
letterSpacing: "0em",
|
|
570
570
|
fontFamily: fontFamily.sans
|
|
571
571
|
}
|
|
572
|
-
// NOTE: heading-2xs removido — era duplicata pura de title-lg (ambos 20px/500/0em).
|
|
573
|
-
// Consumidores migrados para text-title-lg.
|
|
574
572
|
};
|
|
575
573
|
const title = {
|
|
576
574
|
"title-lg": {
|
|
@@ -578,7 +576,7 @@ const title = {
|
|
|
578
576
|
// 20px
|
|
579
577
|
lineHeight: "1.75rem",
|
|
580
578
|
// 28px
|
|
581
|
-
fontWeight: fontWeight.
|
|
579
|
+
fontWeight: fontWeight.semibold,
|
|
582
580
|
letterSpacing: "0em",
|
|
583
581
|
fontFamily: fontFamily.sans
|
|
584
582
|
},
|
|
@@ -587,8 +585,8 @@ const title = {
|
|
|
587
585
|
// 16px
|
|
588
586
|
lineHeight: "1.5rem",
|
|
589
587
|
// 24px
|
|
590
|
-
fontWeight: fontWeight.
|
|
591
|
-
letterSpacing: "
|
|
588
|
+
fontWeight: fontWeight.semibold,
|
|
589
|
+
letterSpacing: "-0.011em",
|
|
592
590
|
fontFamily: fontFamily.sans
|
|
593
591
|
},
|
|
594
592
|
"title-sm": {
|
|
@@ -596,71 +594,50 @@ const title = {
|
|
|
596
594
|
// 14px
|
|
597
595
|
lineHeight: "1.25rem",
|
|
598
596
|
// 20px
|
|
599
|
-
fontWeight: fontWeight.
|
|
600
|
-
letterSpacing: "
|
|
597
|
+
fontWeight: fontWeight.semibold,
|
|
598
|
+
letterSpacing: "-0.006em",
|
|
601
599
|
fontFamily: fontFamily.sans
|
|
602
600
|
}
|
|
603
601
|
};
|
|
604
|
-
const
|
|
605
|
-
"
|
|
602
|
+
const body = {
|
|
603
|
+
"body-2xl": {
|
|
606
604
|
fontSize: "1.5rem",
|
|
607
605
|
// 24px
|
|
608
606
|
lineHeight: "2rem",
|
|
609
607
|
// 32px
|
|
610
|
-
fontWeight: fontWeight.
|
|
608
|
+
fontWeight: fontWeight.regular,
|
|
611
609
|
letterSpacing: "-0.015em",
|
|
612
610
|
fontFamily: fontFamily.sans
|
|
613
611
|
},
|
|
614
|
-
"
|
|
612
|
+
"body-xl": {
|
|
615
613
|
fontSize: "1.125rem",
|
|
616
614
|
// 18px
|
|
617
615
|
lineHeight: "1.5rem",
|
|
618
616
|
// 24px
|
|
619
|
-
fontWeight: fontWeight.
|
|
617
|
+
fontWeight: fontWeight.regular,
|
|
620
618
|
letterSpacing: "-0.015em",
|
|
621
619
|
fontFamily: fontFamily.sans
|
|
622
620
|
},
|
|
623
|
-
"
|
|
621
|
+
"body-lg": {
|
|
624
622
|
fontSize: "1rem",
|
|
625
623
|
// 16px
|
|
626
624
|
lineHeight: "1.5rem",
|
|
627
625
|
// 24px
|
|
628
|
-
fontWeight: fontWeight.
|
|
626
|
+
fontWeight: fontWeight.regular,
|
|
629
627
|
letterSpacing: "-0.011em",
|
|
630
628
|
fontFamily: fontFamily.sans
|
|
631
629
|
},
|
|
632
|
-
"
|
|
630
|
+
"body-md": {
|
|
633
631
|
fontSize: "0.875rem",
|
|
634
632
|
// 14px
|
|
635
633
|
lineHeight: "1.25rem",
|
|
636
634
|
// 20px
|
|
637
|
-
fontWeight: fontWeight.
|
|
635
|
+
fontWeight: fontWeight.regular,
|
|
638
636
|
letterSpacing: "-0.006em",
|
|
639
637
|
fontFamily: fontFamily.sans
|
|
640
638
|
},
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
// 12px
|
|
644
|
-
lineHeight: "1rem",
|
|
645
|
-
// 16px
|
|
646
|
-
fontWeight: fontWeight.medium,
|
|
647
|
-
letterSpacing: "0em",
|
|
648
|
-
fontFamily: fontFamily.sans
|
|
649
|
-
},
|
|
650
|
-
// ★ NOVO — preenche tier 11px no namespace label (interactive, weight 500).
|
|
651
|
-
// Casos: micro label, hint count, rail tooltip.
|
|
652
|
-
"label-2xs": {
|
|
653
|
-
fontSize: "0.6875rem",
|
|
654
|
-
// 11px
|
|
655
|
-
lineHeight: "0.875rem",
|
|
656
|
-
// 14px
|
|
657
|
-
fontWeight: fontWeight.medium,
|
|
658
|
-
letterSpacing: "0em",
|
|
659
|
-
fontFamily: fontFamily.sans
|
|
660
|
-
},
|
|
661
|
-
// ★ NOVO — preenche tier 13px no namespace label (body default interativo do projeto).
|
|
662
|
-
// Casos: button sm, dropdown item, input value, tab default.
|
|
663
|
-
"label-base": {
|
|
639
|
+
// body-sm — 13px — body default do projeto (button, dropdown, input, table cell)
|
|
640
|
+
"body-sm": {
|
|
664
641
|
fontSize: "0.8125rem",
|
|
665
642
|
// 13px
|
|
666
643
|
lineHeight: "1.125rem",
|
|
@@ -668,72 +645,24 @@ const label = {
|
|
|
668
645
|
fontWeight: fontWeight.medium,
|
|
669
646
|
letterSpacing: "-0.003em",
|
|
670
647
|
fontFamily: fontFamily.sans
|
|
671
|
-
}
|
|
672
|
-
};
|
|
673
|
-
const paragraph = {
|
|
674
|
-
"paragraph-xl": {
|
|
675
|
-
fontSize: "1.5rem",
|
|
676
|
-
// 24px
|
|
677
|
-
lineHeight: "2rem",
|
|
678
|
-
// 32px
|
|
679
|
-
fontWeight: fontWeight.regular,
|
|
680
|
-
letterSpacing: "-0.015em",
|
|
681
|
-
fontFamily: fontFamily.sans
|
|
682
|
-
},
|
|
683
|
-
"paragraph-lg": {
|
|
684
|
-
fontSize: "1.125rem",
|
|
685
|
-
// 18px
|
|
686
|
-
lineHeight: "1.5rem",
|
|
687
|
-
// 24px
|
|
688
|
-
fontWeight: fontWeight.regular,
|
|
689
|
-
letterSpacing: "-0.015em",
|
|
690
|
-
fontFamily: fontFamily.sans
|
|
691
|
-
},
|
|
692
|
-
"paragraph-md": {
|
|
693
|
-
fontSize: "1rem",
|
|
694
|
-
// 16px
|
|
695
|
-
lineHeight: "1.5rem",
|
|
696
|
-
// 24px
|
|
697
|
-
fontWeight: fontWeight.regular,
|
|
698
|
-
letterSpacing: "-0.011em",
|
|
699
|
-
fontFamily: fontFamily.sans
|
|
700
|
-
},
|
|
701
|
-
"paragraph-sm": {
|
|
702
|
-
fontSize: "0.875rem",
|
|
703
|
-
// 14px
|
|
704
|
-
lineHeight: "1.25rem",
|
|
705
|
-
// 20px
|
|
706
|
-
fontWeight: fontWeight.regular,
|
|
707
|
-
letterSpacing: "-0.006em",
|
|
708
|
-
fontFamily: fontFamily.sans
|
|
709
648
|
},
|
|
710
|
-
|
|
649
|
+
// body-xs — 12px — interactive small (chip, sub-item)
|
|
650
|
+
"body-xs": {
|
|
711
651
|
fontSize: "0.75rem",
|
|
712
652
|
// 12px
|
|
713
653
|
lineHeight: "1rem",
|
|
714
654
|
// 16px
|
|
715
|
-
fontWeight: fontWeight.
|
|
655
|
+
fontWeight: fontWeight.medium,
|
|
716
656
|
letterSpacing: "0em",
|
|
717
657
|
fontFamily: fontFamily.sans
|
|
718
|
-
},
|
|
719
|
-
// ★ NOVO — preenche tier 13px no namespace paragraph (body default do projeto).
|
|
720
|
-
// Casos: body small, msg bubble, table cell, command item, dropdown item.
|
|
721
|
-
"paragraph-base": {
|
|
722
|
-
fontSize: "0.8125rem",
|
|
723
|
-
// 13px
|
|
724
|
-
lineHeight: "1.125rem",
|
|
725
|
-
// 18px
|
|
726
|
-
fontWeight: fontWeight.regular,
|
|
727
|
-
letterSpacing: "-0.003em",
|
|
728
|
-
fontFamily: fontFamily.sans
|
|
729
658
|
}
|
|
730
659
|
};
|
|
731
660
|
const caption = {
|
|
732
661
|
"caption-md": {
|
|
733
|
-
fontSize: "0.
|
|
734
|
-
//
|
|
735
|
-
lineHeight: "
|
|
736
|
-
//
|
|
662
|
+
fontSize: "0.75rem",
|
|
663
|
+
// 12px
|
|
664
|
+
lineHeight: "1rem",
|
|
665
|
+
// 16px
|
|
737
666
|
fontWeight: fontWeight.regular,
|
|
738
667
|
letterSpacing: "0em",
|
|
739
668
|
fontFamily: fontFamily.sans
|
|
@@ -747,8 +676,6 @@ const caption = {
|
|
|
747
676
|
letterSpacing: "0em",
|
|
748
677
|
fontFamily: fontFamily.sans
|
|
749
678
|
},
|
|
750
|
-
// ★ NOVO — preenche tier 10px (faltava completamente no DS).
|
|
751
|
-
// Casos: micro caption (bubble meta, conv ID, history meta).
|
|
752
679
|
"caption-xs": {
|
|
753
680
|
fontSize: "0.625rem",
|
|
754
681
|
// 10px
|
|
@@ -759,67 +686,6 @@ const caption = {
|
|
|
759
686
|
fontFamily: fontFamily.sans
|
|
760
687
|
}
|
|
761
688
|
};
|
|
762
|
-
const subheading = {
|
|
763
|
-
"subheading-md": {
|
|
764
|
-
fontSize: "1rem",
|
|
765
|
-
// 16px
|
|
766
|
-
lineHeight: "1.5rem",
|
|
767
|
-
// 24px
|
|
768
|
-
fontWeight: fontWeight.medium,
|
|
769
|
-
letterSpacing: "0.06em",
|
|
770
|
-
fontFamily: fontFamily.sans
|
|
771
|
-
},
|
|
772
|
-
"subheading-sm": {
|
|
773
|
-
fontSize: "0.875rem",
|
|
774
|
-
// 14px
|
|
775
|
-
lineHeight: "1.25rem",
|
|
776
|
-
// 20px
|
|
777
|
-
fontWeight: fontWeight.medium,
|
|
778
|
-
letterSpacing: "0.06em",
|
|
779
|
-
fontFamily: fontFamily.sans
|
|
780
|
-
},
|
|
781
|
-
"subheading-xs": {
|
|
782
|
-
fontSize: "0.75rem",
|
|
783
|
-
// 12px
|
|
784
|
-
lineHeight: "1rem",
|
|
785
|
-
// 16px
|
|
786
|
-
fontWeight: fontWeight.medium,
|
|
787
|
-
letterSpacing: "0.04em",
|
|
788
|
-
fontFamily: fontFamily.sans
|
|
789
|
-
},
|
|
790
|
-
"subheading-2xs": {
|
|
791
|
-
fontSize: "0.6875rem",
|
|
792
|
-
// 11px
|
|
793
|
-
lineHeight: "0.75rem",
|
|
794
|
-
// 12px
|
|
795
|
-
fontWeight: fontWeight.medium,
|
|
796
|
-
letterSpacing: "0.02em",
|
|
797
|
-
fontFamily: fontFamily.sans
|
|
798
|
-
},
|
|
799
|
-
// ★ NOVO — variante "strong" weight 700 + tracking apertado (+0.06em).
|
|
800
|
-
// Substitui o pattern literal `text-[Npx] font-bold tracking-[0.06em] uppercase`.
|
|
801
|
-
// Casos: FILTERS/CATEGORIAS section title, table thead, MenuSidebar section header.
|
|
802
|
-
"subheading-strong-md": {
|
|
803
|
-
fontSize: "0.6875rem",
|
|
804
|
-
// 11px
|
|
805
|
-
lineHeight: "0.875rem",
|
|
806
|
-
// 14px
|
|
807
|
-
fontWeight: fontWeight.bold,
|
|
808
|
-
letterSpacing: "0.06em",
|
|
809
|
-
fontFamily: fontFamily.sans
|
|
810
|
-
},
|
|
811
|
-
// ★ NOVO — versão 10px do strong subheading.
|
|
812
|
-
// Casos: chip counter, unread badge, header tab count, agent rank.
|
|
813
|
-
"subheading-strong-sm": {
|
|
814
|
-
fontSize: "0.625rem",
|
|
815
|
-
// 10px
|
|
816
|
-
lineHeight: "0.75rem",
|
|
817
|
-
// 12px
|
|
818
|
-
fontWeight: fontWeight.bold,
|
|
819
|
-
letterSpacing: "0.06em",
|
|
820
|
-
fontFamily: fontFamily.sans
|
|
821
|
-
}
|
|
822
|
-
};
|
|
823
689
|
const code = {
|
|
824
690
|
"code-md": {
|
|
825
691
|
fontSize: "1rem",
|
|
@@ -842,10 +708,8 @@ const typography = {
|
|
|
842
708
|
...display,
|
|
843
709
|
...heading,
|
|
844
710
|
...title,
|
|
845
|
-
...
|
|
846
|
-
...paragraph,
|
|
711
|
+
...body,
|
|
847
712
|
...caption,
|
|
848
|
-
...subheading,
|
|
849
713
|
...code
|
|
850
714
|
};
|
|
851
715
|
const duration = {
|
package/dist-lib/tokens.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.mjs","sources":["../tokens/brands/default/primitives/color-palette.ts","../tokens/brands/default/semantic/color-light.ts","../tokens/brands/default/semantic/color-dark.ts","../tokens/brands/default/primitives/scales.ts","../tokens/brands/default/semantic/spacing.ts","../tokens/brands/default/semantic/sizing.ts","../tokens/brands/default/semantic/shape.ts","../tokens/brands/default/semantic/elevation.ts","../tokens/brands/default/primitives/fonts.ts","../tokens/brands/default/semantic/typography.ts","../tokens/brands/default/primitives/motion.ts"],"sourcesContent":["/**\n * color-palette.ts — Primitive color tokens (v3)\n * Tier 1 de 3: valores raw. API privada.\n *\n * Nunca referenciar diretamente em componentes.\n * Componentes usam semantic tokens (color-light / color-dark).\n *\n * Formato: OKLCH (perceptualmente uniforme, suporte P3, ideal para color-mix())\n *\n * Escala 50–950 (12 níveis com 150 extra):\n * 50 → quase branco\n * 500/600 → tom médio (referência de identidade — varia por cor)\n * 950 → quase preto\n *\n * NAMING V3:\n * brand → cor da marca (verde escuro #00803c — light theme)\n * brandContrast → variante brilhante (verde #0fc589 — dark theme)\n * gray → neutro puro (chroma 0)\n * danger → feedback destrutivo/erro (vermelho)\n * success / warning / info → feedback positivo / atenção / informação\n */\n\n// ─── Brand — base oklch(0.5248 0.1415 150.9) em 600 (verde escuro #00803c) ────\nexport const brand = {\n 50: \"oklch(0.97 0.022 151)\",\n 100: \"oklch(0.93 0.045 151)\",\n 150: \"oklch(0.90 0.060 151)\",\n 200: \"oklch(0.85 0.085 151)\",\n 300: \"oklch(0.76 0.115 151)\",\n 400: \"oklch(0.65 0.135 151)\",\n 500: \"oklch(0.58 0.140 151)\",\n 600: \"oklch(0.5248 0.1415 150.9)\", // BASE — identidade light\n 700: \"oklch(0.43 0.130 151)\",\n 800: \"oklch(0.34 0.110 151)\",\n 900: \"oklch(0.24 0.080 151)\",\n 950: \"oklch(0.16 0.055 151)\",\n} as const;\n\n// ─── Brand Contrast — base oklch(0.7289 0.1571 162.3) em 400 (verde brilhante #0fc589) ──\n// Usado no dark theme como cor primária. Hue 162 (ligeiramente diferente do brand 151).\nexport const brandContrast = {\n 50: \"oklch(0.97 0.025 162)\",\n 100: \"oklch(0.94 0.050 162)\",\n 150: \"oklch(0.91 0.075 162)\",\n 200: \"oklch(0.86 0.100 162)\",\n 300: \"oklch(0.79 0.130 162)\",\n 400: \"oklch(0.7289 0.1571 162.3)\", // BASE — identidade dark\n 500: \"oklch(0.65 0.155 162)\",\n 600: \"oklch(0.55 0.140 162)\",\n 700: \"oklch(0.45 0.115 162)\",\n 800: \"oklch(0.34 0.085 162)\",\n 900: \"oklch(0.24 0.060 162)\",\n 950: \"oklch(0.16 0.040 162)\",\n} as const;\n\n// ─── Gray — neutro puro (chroma 0) ────────────────────────────────────────────\nexport const gray = {\n 50: \"oklch(0.973 0 0)\",\n 100: \"oklch(0.94 0 0)\",\n 150: \"oklch(0.931 0 0)\",\n 200: \"oklch(0.9076 0 0)\",\n 300: \"oklch(0.8761 0 0)\",\n 400: \"oklch(0.7025 0 0)\",\n 500: \"oklch(0.4997 0 0)\",\n 600: \"oklch(0.36 0 0)\",\n 700: \"oklch(0.30 0 0)\",\n 800: \"oklch(0.2645 0 0)\",\n 900: \"oklch(0.205 0 0)\",\n 950: \"oklch(0.15 0 0)\",\n} as const;\n\n// ─── Danger — base oklch(0.6368 0.2078 25.33) em 500 (vermelho hue 25) ────────\nexport const danger = {\n 50: \"oklch(0.97 0.025 25)\",\n 100: \"oklch(0.94 0.050 25)\",\n 150: \"oklch(0.91 0.080 25)\",\n 200: \"oklch(0.86 0.110 25)\",\n 300: \"oklch(0.76 0.165 25)\",\n 400: \"oklch(0.69 0.195 25)\",\n 500: \"oklch(0.6368 0.2078 25.33)\", // BASE\n 600: \"oklch(0.56 0.200 25)\",\n 700: \"oklch(0.46 0.180 25)\",\n 800: \"oklch(0.36 0.140 25)\",\n 900: \"oklch(0.26 0.100 25)\",\n 950: \"oklch(0.18 0.070 25)\",\n} as const;\n\n// ─── Success — base oklch(0.66 0.135 161) em 500 (verde teal hue 161) ─────────\nexport const success = {\n 50: \"oklch(0.96 0.025 161)\",\n 100: \"oklch(0.93 0.045 161)\",\n 150: \"oklch(0.90 0.065 161)\",\n 200: \"oklch(0.85 0.090 161)\",\n 300: \"oklch(0.77 0.115 161)\",\n 400: \"oklch(0.71 0.130 161)\",\n 500: \"oklch(0.66 0.135 161)\", // BASE\n 600: \"oklch(0.57 0.130 161)\",\n 700: \"oklch(0.47 0.110 161)\",\n 800: \"oklch(0.37 0.085 161)\",\n 900: \"oklch(0.27 0.060 161)\",\n 950: \"oklch(0.19 0.045 161)\",\n} as const;\n\n// ─── Warning — base oklch(0.81 0.160 81) em 500 (amarelo-laranja hue 81) ──────\nexport const warning = {\n 50: \"oklch(0.97 0.030 81)\",\n 100: \"oklch(0.95 0.060 81)\",\n 150: \"oklch(0.93 0.090 81)\",\n 200: \"oklch(0.91 0.115 81)\",\n 300: \"oklch(0.86 0.150 81)\",\n 400: \"oklch(0.83 0.155 81)\",\n 500: \"oklch(0.81 0.160 81)\", // BASE\n 600: \"oklch(0.71 0.155 81)\",\n 700: \"oklch(0.59 0.135 81)\",\n 800: \"oklch(0.46 0.110 81)\",\n 900: \"oklch(0.34 0.085 81)\",\n 950: \"oklch(0.24 0.060 81)\",\n} as const;\n\n// ─── Info — base oklch(0.62 0.210 280) em 500 (roxo hue 280) ──────────────────\nexport const info = {\n 50: \"oklch(0.97 0.025 280)\",\n 100: \"oklch(0.93 0.050 280)\",\n 150: \"oklch(0.89 0.085 280)\",\n 200: \"oklch(0.85 0.110 280)\",\n 300: \"oklch(0.76 0.155 280)\",\n 400: \"oklch(0.69 0.190 280)\",\n 500: \"oklch(0.62 0.210 280)\", // BASE\n 600: \"oklch(0.55 0.200 280)\",\n 700: \"oklch(0.46 0.170 280)\",\n 800: \"oklch(0.37 0.135 280)\",\n 900: \"oklch(0.27 0.095 280)\",\n 950: \"oklch(0.19 0.070 280)\",\n} as const;\n\n// ─── Universais puros ─────────────────────────────────────────────────────────\nexport const white = \"oklch(1 0 0)\";\nexport const black = \"oklch(0 0 0)\";\n\n// ─── Alpha (overlays / scrim — só black e white com OKLCH slash alpha) ────────\nexport const alpha = {\n black: {\n 4: \"oklch(0 0 0 / 0.04)\",\n 8: \"oklch(0 0 0 / 0.08)\",\n 12: \"oklch(0 0 0 / 0.12)\",\n 16: \"oklch(0 0 0 / 0.16)\",\n 24: \"oklch(0 0 0 / 0.24)\",\n 32: \"oklch(0 0 0 / 0.32)\",\n 40: \"oklch(0 0 0 / 0.40)\",\n 45: \"oklch(0 0 0 / 0.45)\",\n 48: \"oklch(0 0 0 / 0.48)\",\n 55: \"oklch(0 0 0 / 0.55)\",\n 64: \"oklch(0 0 0 / 0.64)\",\n },\n white: {\n 1: \"oklch(1 0 0 / 0.01)\",\n 2: \"oklch(1 0 0 / 0.02)\",\n 3: \"oklch(1 0 0 / 0.03)\",\n 4: \"oklch(1 0 0 / 0.04)\",\n 8: \"oklch(1 0 0 / 0.08)\",\n 12: \"oklch(1 0 0 / 0.12)\",\n 16: \"oklch(1 0 0 / 0.16)\",\n 24: \"oklch(1 0 0 / 0.24)\",\n 32: \"oklch(1 0 0 / 0.32)\",\n },\n} as const;\n\nexport const colorPalette = {\n brand, brandContrast, gray,\n success, warning, danger, info,\n white, black,\n alpha,\n};\n","/**\n * color-light.ts — Semantic color tokens (light mode) — V3\n * Tier 2 de 3: intenção. API pública.\n *\n * NOMENCLATURA V3:\n * brand → cor da marca (NÃO \"primary\")\n * danger → feedback destrutivo (NÃO \"critical\")\n * fg.default → texto padrão (NÃO \"fg.foreground\")\n * on-* → texto sobre cor sólida\n * subtle/muted → variantes alpha-tinted (color-mix da cor base)\n * hover → escurece cor sólida (mix com black) ou sobe alpha\n *\n * NAMESPACES:\n * bg → fundos de superfícies, brand, status, neutros\n * fg → texto + ícones\n * border → bordas, dividers\n * ring → focus rings (acessibilidade)\n * overlay → scrims de modal/drawer\n */\n\nimport {\n brand, gray, success, warning, danger, info,\n white, black,\n} from \"../primitives/color-palette\";\n\n// ─── Background ───────────────────────────────────────────────────────────────\n\nexport const bg = {\n // Surfaces (sólidos)\n canvas: white, // body, página\n surface: white, // cards, drawer\n \"surface-elevated\": white, // popovers, modais\n \"surface-panels\": white, // página de fundo\n sidebar: \"oklch(0.9516 0.0027 106.45)\", // mineral-100 — calidez sidebar (sem primitive equiv)\n\n // Backgrounds neutros (sólidos cinza no light)\n subtle: gray[50],\n muted: gray[50],\n emphasis: gray[100], // neutro mais visível que muted (sem semântica de \"active\")\n input: white,\n accent: white, // light: bg-accent = branco (item ativo destaca por contraste)\n\n // Brand (derivam do brand[600])\n brand: brand[600],\n \"brand-subtle\": `color-mix(in oklch, ${brand[600]} 14%, transparent)`,\n \"brand-hover\": `color-mix(in oklch, ${brand[600]} 90%, black)`,\n \"brand-subtle-hover\": `color-mix(in oklch, ${brand[600]} 22%, transparent)`,\n\n // Status (sólido + muted alpha — ×4 cores)\n danger: danger[500],\n \"danger-muted\": `color-mix(in oklch, ${danger[500]} 14%, transparent)`,\n \"danger-hover\": `color-mix(in oklch, ${danger[500]} 90%, black)`,\n \"danger-muted-hover\": `color-mix(in oklch, ${danger[500]} 22%, transparent)`,\n\n success: success[500],\n \"success-muted\": `color-mix(in oklch, ${success[500]} 14%, transparent)`,\n \"success-hover\": `color-mix(in oklch, ${success[500]} 90%, black)`,\n \"success-muted-hover\": `color-mix(in oklch, ${success[500]} 22%, transparent)`,\n\n warning: warning[500],\n \"warning-muted\": `color-mix(in oklch, ${warning[500]} 14%, transparent)`,\n \"warning-hover\": `color-mix(in oklch, ${warning[500]} 90%, black)`,\n \"warning-muted-hover\": `color-mix(in oklch, ${warning[500]} 22%, transparent)`,\n\n info: info[500],\n \"info-muted\": `color-mix(in oklch, ${info[500]} 14%, transparent)`,\n \"info-hover\": `color-mix(in oklch, ${info[500]} 90%, black)`,\n \"info-muted-hover\": `color-mix(in oklch, ${info[500]} 22%, transparent)`,\n\n // Hover dos neutros — sólidos cinza no light\n \"muted-hover\": \"oklch(0.95 0 0)\",\n \"input-hover\": gray[50], // 0.973 — sutil sobre input=white\n \"accent-hover\": \"oklch(0.84 0 0)\",\n\n // Sidebar item states — active = branco (contrasta com sidebar mineral-100), hover = mineral subtle\n \"sidebar-accent\": white,\n \"sidebar-accent-hover\": \"oklch(0.92 0.0068 115.72)\",\n\n // Tabela — sólidos\n \"table\": white,\n \"table-head\": gray[50],\n // Hover sutil: gray[50] (~2.7% diff de white) em vez de gray[100] (6% — forte demais).\n // Mesmo tom do table-head, mantém hierarquia visual sem competir com cells selected.\n \"table-row-hover\": gray[50],\n // Linha selecionada — alpha brand discreto (6%); hover sobe pra 10%\n // (não usar `bg-brand-subtle` 14% — forte demais como bg de row)\n \"table-row-selected\": `color-mix(in oklch, ${brand[600]} 6%, transparent)`,\n \"table-row-selected-hover\": `color-mix(in oklch, ${brand[600]} 10%, transparent)`,\n\n // Dropdown/Popover — referencia bg-canvas (white no light)\n \"dropdown\": \"var(--color-bg-canvas)\",\n} as const;\n\n// ─── Foreground (texto + ícones) ──────────────────────────────────────────────\n\nexport const fg = {\n // Hierarquia\n strong: gray[950],\n default: gray[950],\n muted: gray[500], // labels, helpers (light)\n subtle: gray[400], // placeholders, hints\n disabled: gray[400],\n\n // Brand\n brand: brand[600],\n\n // Status\n danger: danger[500],\n success: success[500],\n warning: warning[500],\n info: info[500],\n\n // Sobre fundos sólidos (on-*)\n \"on-brand\": white,\n \"on-danger\": white,\n \"on-success\": white,\n \"on-warning\": black, // amarelo claro → preto pra contraste\n \"on-info\": white,\n} as const;\n\n// ─── Border ───────────────────────────────────────────────────────────────────\n\nexport const border = {\n default: gray[200], // borda padrão\n subtle: gray[150], // dividers, controles\n input: gray[300], // inputs / fields\n sidebar: \"oklch(0.9076 0.0068 115.72)\", // mineral-200\n\n brand: brand[600],\n \"brand-subtle\": `color-mix(in oklch, ${brand[600]} 36%, transparent)`,\n\n \"danger-muted\": `color-mix(in oklch, ${danger[500]} 36%, transparent)`,\n \"success-muted\": `color-mix(in oklch, ${success[500]} 36%, transparent)`,\n \"warning-muted\": `color-mix(in oklch, ${warning[500]} 36%, transparent)`,\n \"info-muted\": `color-mix(in oklch, ${info[500]} 36%, transparent)`,\n\n // Tabela\n table: gray[150],\n} as const;\n\n// ─── Ring (focus rings — cor pura usada com ring-* do Tailwind) ───────────────\n\nexport const ring = {\n brand: `color-mix(in oklch, ${brand[600]} 22%, transparent)`,\n danger: `color-mix(in oklch, ${danger[500]} 22%, transparent)`,\n success: `color-mix(in oklch, ${success[500]} 22%, transparent)`,\n warning: `color-mix(in oklch, ${warning[500]} 22%, transparent)`,\n info: `color-mix(in oklch, ${info[500]} 22%, transparent)`,\n secondary: `color-mix(in oklch, ${gray[500]} 22%, transparent)`,\n} as const;\n\n// ─── Overlay / Scrim ──────────────────────────────────────────────────────────\n\nexport const overlay = {\n // Scrim de backdrop (modais, drawers)\n scrim: \"oklch(0 0 0 / 0.55)\",\n // Outline de 6px pra elementos flutuantes (panels, dropdowns, command, modais)\n // — consumido pela utility `outline-float`. Light: cinza medium 12%.\n // Valor anterior (6%) era visualmente imperceptível em backgrounds claros;\n // 12% mantém o efeito \"halo sutil\" mas com presença visual real.\n float: \"oklch(0.55 0 0 / 0.12)\",\n} as const;\n\nexport const colorLight = { bg, fg, border, ring, overlay };\n","/**\n * color-dark.ts — Semantic color tokens (dark mode) — V3\n * Tier 2 de 3: intenção. API pública.\n *\n * Mesmo contrato de nomes que color-light.ts. Só muda os valores.\n * Dark mode usa brandContrast (verde brilhante #0fc589) em vez de brand.\n *\n * MECÂNICA V3:\n * - Surfaces sólidas (gray-900 e variantes)\n * - Backgrounds neutros como alpha-overlay (oklch(1 0 0 / X)) que se adaptam à surface\n * - Brand/status muted via color-mix da cor base com transparent\n * - Hover de sólidos: clareiam (mix com white)\n * - Hover de alphas: sobem 1 tier\n */\n\nimport {\n brandContrast, gray, success, warning, danger, info,\n white, black,\n} from \"../primitives/color-palette\";\n\n// ─── Background ───────────────────────────────────────────────────────────────\n\nexport const bg = {\n // Surfaces sólidas\n canvas: gray[900], // body\n surface: \"oklch(0.225 0 0)\", // cards, drawer (entre gray-900 e gray-800)\n \"surface-elevated\": \"oklch(0.225 0 0)\",\n \"surface-panels\": gray[900],\n sidebar: \"oklch(0.225 0 0)\",\n\n // Backgrounds neutros (alpha overlay — adapta ao surface debaixo)\n subtle: \"oklch(1 0 0 / 0.01)\",\n muted: \"oklch(1 0 0 / 0.03)\",\n emphasis: `color-mix(in oklch, ${white} 12%, transparent)`, // mesmo visual do bg-accent (sem semântica de \"active\")\n input: \"oklch(1 0 0 / 0.04)\",\n accent: \"oklch(1 0 0 / 0.12)\",\n\n // Brand (dark usa brandContrast — verde brilhante)\n brand: brandContrast[400],\n \"brand-subtle\": `color-mix(in oklch, ${brandContrast[400]} 14%, transparent)`,\n \"brand-hover\": `color-mix(in oklch, ${brandContrast[400]} 90%, black)`,\n \"brand-subtle-hover\": `color-mix(in oklch, ${brandContrast[400]} 22%, transparent)`,\n\n // Status (sólido + muted alpha — ×4 cores)\n danger: danger[500],\n \"danger-muted\": `color-mix(in oklch, ${danger[500]} 14%, transparent)`,\n \"danger-hover\": `color-mix(in oklch, ${danger[500]} 90%, white)`,\n \"danger-muted-hover\": `color-mix(in oklch, ${danger[500]} 22%, transparent)`,\n\n success: success[500],\n \"success-muted\": `color-mix(in oklch, ${success[500]} 14%, transparent)`,\n \"success-hover\": `color-mix(in oklch, ${success[500]} 90%, white)`,\n \"success-muted-hover\": `color-mix(in oklch, ${success[500]} 22%, transparent)`,\n\n warning: warning[500],\n \"warning-muted\": `color-mix(in oklch, ${warning[500]} 14%, transparent)`,\n \"warning-hover\": `color-mix(in oklch, ${warning[500]} 90%, white)`,\n \"warning-muted-hover\": `color-mix(in oklch, ${warning[500]} 22%, transparent)`,\n\n info: info[500],\n \"info-muted\": `color-mix(in oklch, ${info[500]} 14%, transparent)`,\n \"info-hover\": `color-mix(in oklch, ${info[500]} 90%, white)`,\n \"info-muted-hover\": `color-mix(in oklch, ${info[500]} 22%, transparent)`,\n\n // Hover dos neutros — alphas sobem 1 tier\n \"muted-hover\": \"oklch(1 0 0 / 0.08)\",\n \"input-hover\": \"oklch(1 0 0 / 0.08)\",\n \"accent-hover\": \"oklch(1 0 0 / 0.16)\",\n\n // Sidebar item states — alphas\n \"sidebar-accent\": \"oklch(1 0 0 / 0.08)\",\n \"sidebar-accent-hover\": \"oklch(1 0 0 / 0.12)\",\n\n // Tabela — sólidos pra suportar sticky columns sem vazamento\n \"table\": \"oklch(0.225 0 0)\", // mesmo bg-surface\n \"table-head\": \"oklch(0.252 0 0)\", // gray-850 — head sticky\n \"table-row-hover\": \"oklch(0.252 0 0)\",\n // Linha selecionada — alpha brandContrast 10%; hover sobe pra 14%\n // (no dark precisa de alpha levemente maior pra ficar visível sobre surface escuro)\n \"table-row-selected\": `color-mix(in oklch, ${brandContrast[400]} 10%, transparent)`,\n \"table-row-selected-hover\": `color-mix(in oklch, ${brandContrast[400]} 14%, transparent)`,\n\n // Dropdown/Popover — frosted-glass: bg-canvas com 70% opacidade\n // (combina com backdrop-blur no componente pra efeito vidro fosco)\n \"dropdown\": \"color-mix(in oklab, var(--color-bg-canvas) 70%, transparent)\",\n} as const;\n\n// ─── Foreground (texto + ícones) ──────────────────────────────────────────────\n\nexport const fg = {\n // Hierarquia\n strong: white, // 100% — títulos\n default: \"oklch(0.98 0 0)\", // texto padrão (sem primitive equiv exato)\n muted: gray[400], // labels, helpers\n subtle: `color-mix(in oklch, ${gray[400]} 70%, transparent)`, // placeholders\n disabled: gray[600],\n\n // Brand\n brand: brandContrast[400],\n\n // Status\n danger: danger[500],\n success: success[500],\n warning: warning[500],\n info: info[500],\n\n // Sobre fundos sólidos (on-*) — dark inverte: verde brilhante, vermelho saturado, etc\n \"on-brand\": black, // preto sobre verde brilhante\n \"on-danger\": white,\n \"on-success\": black,\n \"on-warning\": black,\n \"on-info\": white,\n} as const;\n\n// ─── Border ───────────────────────────────────────────────────────────────────\n\nexport const border = {\n default: gray[800],\n subtle: \"oklch(1 0 0 / 0.04)\",\n input: \"oklch(1 0 0 / 0.08)\",\n sidebar: gray[800],\n\n brand: brandContrast[400],\n \"brand-subtle\": `color-mix(in oklch, ${brandContrast[400]} 36%, transparent)`,\n\n \"danger-muted\": `color-mix(in oklch, ${danger[500]} 36%, transparent)`,\n \"success-muted\": `color-mix(in oklch, ${success[500]} 36%, transparent)`,\n \"warning-muted\": `color-mix(in oklch, ${warning[500]} 36%, transparent)`,\n \"info-muted\": `color-mix(in oklch, ${info[500]} 36%, transparent)`,\n\n // Tabela\n table: gray[800],\n} as const;\n\n// ─── Ring (focus rings — cor pura usada com ring-* do Tailwind) ───────────────\n\nexport const ring = {\n brand: `color-mix(in oklch, ${brandContrast[400]} 22%, transparent)`,\n danger: `color-mix(in oklch, ${danger[500]} 22%, transparent)`,\n success: `color-mix(in oklch, ${success[500]} 22%, transparent)`,\n warning: `color-mix(in oklch, ${warning[500]} 22%, transparent)`,\n info: `color-mix(in oklch, ${info[500]} 22%, transparent)`,\n secondary: `color-mix(in oklch, ${gray[500]} 22%, transparent)`,\n} as const;\n\n// ─── Overlay / Scrim ──────────────────────────────────────────────────────────\n\nexport const overlay = {\n // Scrim de backdrop (modais, drawers)\n scrim: \"oklch(0 0 0 / 0.55)\",\n // Outline de 6px pra elementos flutuantes (panels, dropdowns, command, modais)\n // — consumido pela utility `outline-float`. Dark: branco 8%.\n // Valor anterior (4%) era visualmente imperceptível em surfaces escuras;\n // 8% mantém o efeito \"halo sutil\" mas com presença visual real.\n float: \"oklch(1 0 0 / 0.08)\",\n} as const;\n\nexport const colorDark = { bg, fg, border, ring, overlay };\n","/**\n * scales.ts — Spatial scale (base-4 system)\n * Tier 1 de 3: valores raw. API privada.\n *\n * Princípio: todo valor espacial é múltiplo de 4px.\n *\n * Uso: importar sp() nos arquivos semantic (spacing.ts, sizing.ts, shape.ts).\n * Nunca usar sp() diretamente em componentes.\n *\n * Fórmula: sp(n) = n * 4px\n */\n\nconst BASE = 4; // px\n\n/** Retorna valor em px como string */\nexport const sp = (n: number): string => `${n * BASE}px`;\n\n/**\n * Escala completa: 0 a 80 (0px a 320px)\n * Usar sp() ao invés desta tabela nos tokens semânticos.\n * Esta tabela existe para referência e documentação.\n */\nexport const scale = {\n 0: sp(0), // 0px\n 0.5: sp(0.5), // 2px ← hairline\n 1: sp(1), // 4px ← xs\n 1.5: sp(1.5), // 6px\n 2: sp(2), // 8px ← sm\n 2.5: sp(2.5), // 10px\n 3: sp(3), // 12px ← md\n 3.5: sp(3.5), // 14px\n 4: sp(4), // 16px ← base (1 unit)\n 5: sp(5), // 20px\n 6: sp(6), // 24px ← lg\n 7: sp(7), // 28px\n 8: sp(8), // 32px ← xl\n 9: sp(9), // 36px\n 10: sp(10), // 40px\n 11: sp(11), // 44px ← touch target min\n 12: sp(12), // 48px ← touch target ideal\n 14: sp(14), // 56px\n 16: sp(16), // 64px\n 18: sp(18), // 72px\n 20: sp(20), // 80px\n 24: sp(24), // 96px\n 28: sp(28), // 112px\n 32: sp(32), // 128px\n 40: sp(40), // 160px\n 48: sp(48), // 192px\n 56: sp(56), // 224px\n 64: sp(64), // 256px\n 80: sp(80), // 320px\n} as const;\n","/**\n * spacing.ts — Semantic spacing tokens\n *\n * REGRAS:\n * - Todos os valores derivam de scales.ts.\n * - 3 conceitos: space (genérico), gap (entre items), pad (padding).\n * - Os 3 compartilham a MESMA escala de valores.\n * - O prefixo (sp-, gp-, pad-) diferencia o papel no CSS.\n *\n * ESCALA UNIFICADA:\n * 2xs=2 xs=4 sm=6 md=8 lg=10 xl=12 2xl=16 3xl=20 4xl=24 5xl=28 6xl=32 7xl=48\n *\n * CONVENÇÃO DE PAPÉIS:\n * space → genérico (margin, padding simétrico, offsets)\n * gap → entre filhos flex/grid, icon-to-label, section spacing\n * pad → padding interno de componente\n */\n\nimport { scale } from \"../primitives/scales\";\n\n// Escala unificada: 2 4 6 8 10 12 16 20 24 28 32 48\nconst unified = {\n \"2xs\": scale[0.5], // 2px — hairline, border-like gaps\n xs: scale[1], // 4px — icon-to-text tight, checkbox gap, tag gap\n sm: scale[1.5], // 6px — button icon gap (xxs/xs), badge gap, tabs\n md: scale[2], // 8px — button icon gap (sm/md), form field gap, input padding\n lg: scale[2.5], // 10px — compact card padding\n xl: scale[3], // 12px — button padding (xs), info box gap, card row gap\n \"2xl\": scale[4], // 16px — card padding (sm), section gap, info box padding\n \"3xl\": scale[5], // 20px — spacer médio\n \"4xl\": scale[6], // 24px — card gap padrão, card padding (default), section gap\n \"5xl\": scale[7], // 28px — spacer grande\n \"6xl\": scale[8], // 32px — section major gap\n \"7xl\": scale[12], // 48px — page-level gap\n} as const;\n\n// ─── Space (escala genérica) ─────────────────────────────────────────────────\nexport const space = {\n base: scale[4], // 16px — DEFAULT: uma unidade espacial do sistema\n 0: scale[0],\n px: { px: \"1px\", raw: 1 },\n ...unified,\n} as const;\n\n// ─── Gap (entre items) ──────────────────────────────────────────────────────\nexport const gap = {\n base: scale[6], // 24px — DEFAULT: card/section internal gap\n ...unified,\n} as const;\n\n// ─── Pad (padding de componente) ─────────────────────────────────────────────\nexport const pad = {\n base: scale[3], // 12px — DEFAULT: button/input padding horizontal\n ...unified,\n} as const;\n\n// Export agrupado\nexport const spacing = { space, gap, pad } as const;\nexport type SpacingToken = typeof spacing;\n","/**\n * sizing.ts — Escala genérica de dimensões de componente\n *\n * REGRAS:\n * - Escala única `comp` para h-*, w-*, size-* (height, width, square).\n * - Baseada em scales.ts (base-4 system).\n * - Heights são min-height (componentes crescem com conteúdo).\n * - WCAG 2.1 AA: mínimo 44px de touch target para interativos.\n *\n * Tokens orientados a componente específico (form, layout, icon, container)\n * ficam em components/sizing.ts.\n */\n\nimport { scale } from \"../primitives/scales\";\n\n// ─── Comp (escala genérica de dimensão) ──────────────────────────────────────\n// Gera: h-comp-*, w-comp-*, size-comp-*, min-h-comp-*\nexport const comp = {\n base: scale[10], // 40px — DEFAULT: button md, input md (desktop)\n \"3xs\": scale[4], // 16px — badge micro\n \"2xs\": scale[5], // 20px — badge md, switch\n xs: scale[6], // 24px — compact chip, small tag\n sm: scale[7], // 28px — tabs item\n md: scale[8], // 32px — button xs, input xs\n lg: scale[9], // 36px — button sm, input sm\n xl: scale[10], // 40px — mesmo valor que base\n \"2xl\": scale[11], // 44px — WCAG touch target\n \"3xl\": scale[12], // 48px — confortável\n \"4xl\": scale[14], // 56px — hero CTA\n} as const;\n\nexport const sizing = { comp } as const;\nexport type SizingToken = typeof sizing;\n","/**\n * shape.ts — Shape tokens (border-radius + border-width)\n *\n * REGRAS:\n * - border-radius e border-width ficam juntos porque definem a \"forma\" visual.\n * Quando um muda, o outro costuma mudar — são co-dependentes de tema.\n * - Nomenclatura: base (default), none, xs, sm, md, lg, xl, 2xl, 3xl, 4xl, full.\n *\n * FILOSOFIA DE FORMA:\n * O sistema usa um \"knob\" central (RADIUS_BASE = 0.625rem = 10px).\n * Todos os steps são derivados por multiplicador.\n * Mudar RADIUS_BASE escala toda a personalidade do sistema.\n *\n * `base` = radius padrão de componentes interativos (buttons, cards, inputs, dialogs).\n * Escala numérica (xs→4xl) existe para casos onde se precisa de um radius específico.\n *\n * RELAÇÃO form height → radius:\n * xl (44px) → base (10px)\n * lg (40px) → base (10px)\n * md (36px) → base (10px)\n * sm (32px) → md (8px)\n * xs (28px) → md (8px)\n */\n\n// ─── Radius ───────────────────────────────────────────────────────────────────\n/**\n * Knob central do sistema — controla a \"personalidade de forma\" (sharp → pill).\n * Alterar este valor escala toda a curva de radius proporcionalmente.\n * O transform to-tailwind-v4 gera calc(RADIUS_BASE * N) para cada step.\n */\nexport const RADIUS_BASE = \"0.625rem\"; // 10px — mesma ref do shadcn\n\nexport const radius = {\n base: RADIUS_BASE, // 10px — DEFAULT componentes interativos (= lg)\n none: \"0px\", // 0px — sharp corners\n xs: `${RADIUS_BASE} * 0.4`, // 4px — sutil\n sm: `${RADIUS_BASE} * 0.6`, // 6px — tabs indicator\n md: `${RADIUS_BASE} * 0.8`, // 8px — inputs menores\n lg: RADIUS_BASE, // 10px — igual ao knob (alias de base)\n xl: `${RADIUS_BASE} * 1.4`, // 14px — modais, painéis\n \"2xl\": `${RADIUS_BASE} * 1.8`, // 18px — textarea, select content\n \"3xl\": `${RADIUS_BASE} * 2.2`, // 22px — badges, componentes menores\n \"4xl\": `${RADIUS_BASE} * 2.6`, // 26px — antigo valor de base (retido pra casos específicos)\n full: \"9999px\", // pill — avatars, chips\n} as const;\n\n// ─── Border Width ──────────────────────────────────────────────────────────────\nexport const borderWidth = {\n none: \"0px\",\n xs: \"1px\", // padrão — separadores, inputs, cards\n sm: \"2px\", // ênfase — foco, hover de botão outline\n md: \"4px\", // forte — accent, progress indicator\n} as const;\n\n// ─── Outline (focus ring) ──────────────────────────────────────────────────────\n// Separado de border porque tem semântica de acessibilidade própria\nexport const outline = {\n width: \"2px\", // largura do outline de foco\n offset: \"2px\", // espaço entre elemento e outline\n style: \"solid\",\n} as const;\n\n// ─── Divider ───────────────────────────────────────────────────────────────────\nexport const divider = {\n width: \"1px\",\n style: \"solid\",\n} as const;\n\nexport const shape = { radius, RADIUS_BASE, borderWidth, outline, divider } as const;\nexport type ShapeToken = typeof shape;\n","/**\n * elevation.ts — Elevation tokens (shadows + opacity + blur + z-index) — V3\n *\n * REGRAS:\n * - Shadows ficam juntos com opacity porque definem \"elevação\".\n * - Shadows usam string literal pra parsing em build time.\n * - Múltiplas shadows por camada (ambient + key light).\n * - Dark mode: opacidade ~2-3x maior (sombras precisam ser mais fortes em fundo escuro).\n *\n * NOTA: Shadows usam OKLCH com slash alpha — formato moderno, suporte amplo.\n *\n * HIERARQUIA DE ELEVAÇÃO (V3):\n * none → sem elevação\n * sm → controles, botões em repouso\n * md → cards em repouso, tooltips\n * lg → popovers, dropdowns ancorados\n * xl → dropdowns grandes\n * 2xl → modais, dialogs\n * aside → drawer slide-in lateral (direção horizontal)\n *\n * Outros composites:\n * ring → focus de input/textarea/select (3px brand-tinted box-shadow)\n */\n\nimport { brand, brandContrast, gray, danger, success, warning, info } from \"../primitives/color-palette\";\n\n// ─── Shadow tokens ─────────────────────────────────────────────────────────────\n\nexport const shadow = {\n // ── Light mode ───────────────────────────────────────────────────────────────\n light: {\n none: \"none\",\n sm: \"0 1px 2px oklch(0 0 0 / 0.04)\",\n md: \"rgba(145, 158, 171, 0.18) 0 0 2px 0, rgba(145, 158, 171, 0.12) 0 12px 24px -4px\",\n lg: \"0 8px 24px oklch(0 0 0 / 0.08)\",\n xl: \"0 12px 32px oklch(0 0 0 / 0.08)\",\n \"2xl\": \"0 24px 56px oklch(0 0 0 / 0.16)\",\n aside: \"-8px 0 24px oklch(0 0 0 / 0.12)\",\n\n // Focus ring brand-tinted (composite — usado direto em box-shadow)\n ring: `0 0 0 3px color-mix(in oklch, ${brand[600]} 22%, transparent)`,\n \"ring-danger\": `0 0 0 3px color-mix(in oklch, ${danger[500]} 22%, transparent)`,\n \"ring-warning\": `0 0 0 3px color-mix(in oklch, ${warning[500]} 22%, transparent)`,\n \"ring-success\": `0 0 0 3px color-mix(in oklch, ${success[500]} 22%, transparent)`,\n \"ring-info\": `0 0 0 3px color-mix(in oklch, ${info[500]} 22%, transparent)`,\n },\n\n // ── Dark mode ────────────────────────────────────────────────────────────────\n dark: {\n none: \"none\",\n sm: \"none\",\n md: `0 0 0 1px ${gray[800]}`,\n lg: \"0 8px 24px oklch(0 0 0 / 0.30)\",\n xl: \"0 12px 32px oklch(0 0 0 / 0.40)\",\n \"2xl\": \"0 24px 56px oklch(0 0 0 / 0.45)\",\n aside: \"-8px 0 24px oklch(0 0 0 / 0.40)\",\n\n // Focus ring brand-contrast-tinted (dark usa brandContrast)\n ring: `0 0 0 3px color-mix(in oklch, ${brandContrast[400]} 22%, transparent)`,\n \"ring-danger\": `0 0 0 3px color-mix(in oklch, ${danger[500]} 22%, transparent)`,\n \"ring-warning\": `0 0 0 3px color-mix(in oklch, ${warning[500]} 22%, transparent)`,\n \"ring-success\": `0 0 0 3px color-mix(in oklch, ${success[500]} 22%, transparent)`,\n \"ring-info\": `0 0 0 3px color-mix(in oklch, ${info[500]} 22%, transparent)`,\n },\n} as const;\n\n// ─── Opacity ───────────────────────────────────────────────────────────────────\nexport const opacity = {\n // Estados interativos\n disabled: 0.38,\n hover: 0.08,\n focus: 0.12,\n pressed: 0.12,\n dragged: 0.16,\n\n // Visibilidade\n invisible: 0,\n muted: 0.5,\n subtle: 0.7,\n full: 1,\n\n // Overlay de background (scrims de modal)\n \"scrim-light\": 0.32,\n \"scrim-dark\": 0.64,\n} as const;\n\n// ─── Blur (backdrop-filter) ────────────────────────────────────────────────────\nexport const blur = {\n sm: \"blur(4px)\",\n md: \"blur(8px)\",\n lg: \"blur(16px)\",\n xl: \"blur(24px)\",\n} as const;\n\n// ─── Z-Index ──────────────────────────────────────────────────────────────────\nexport const zIndex = {\n hide: -1,\n base: 0,\n dropdown: 100,\n sticky: 200,\n overlay: 300,\n modal: 400,\n popover: 500,\n toast: 600,\n tooltip: 700,\n} as const;\n\nexport const elevation = { shadow, opacity, blur, zIndex } as const;\nexport type ElevationToken = typeof elevation;\n","/**\n * fonts.ts — Typographic scale\n * Tier 1 de 3: valores raw. API privada.\n *\n * Princípio: escala baseada em razão modular (1.25 — Major Third).\n *\n * BASE = 16px (1rem)\n * Razão = 1.25 (major third)\n *\n * Regra de line-height: proporcional ao font-size.\n * - Displays e headings: ratio 1.2 (tight)\n * - Body: ratio 1.5 (confortável para leitura)\n * - Captions/labels: ratio 1.33\n *\n * Uso: importar nos arquivos semantic (typography.ts).\n * Nunca usar valores raw diretamente em componentes.\n */\n\nconst BASE = 16; // px\nconst RATIO = 1.25; // major third\n\n/**\n * Calcula font-size na escala modular.\n * step > 0 = maior que base, step < 0 = menor que base\n */\nexport const typeSize = (step: number): string =>\n `${Math.round(BASE * Math.pow(RATIO, step))}px`;\n\n/**\n * Calcula line-height proporcional ao font-size.\n * tight = displays/headings, normal = body, loose = captions\n */\nexport const lh = (\n size: number,\n mode: \"tight\" | \"normal\" | \"loose\" = \"normal\"\n): string => {\n const ratio = { tight: 1.2, normal: 1.5, loose: 1.33 };\n return `${Math.round(size * ratio[mode])}px`;\n};\n\n/**\n * Font families (valores raw).\n * A decisão de qual fonte usa cada preset fica em typography.ts (semântico).\n */\nexport const fontFamily = {\n sans: \"var(--font-sans, 'Geist', system-ui, -apple-system, sans-serif)\",\n mono: \"var(--font-mono, 'Geist Mono', 'Fira Code', monospace)\",\n serif: \"var(--font-serif, Georgia, 'Times New Roman', serif)\",\n} as const;\n\n/**\n * Font weights.\n * Usando nomes semânticos, não números — portável entre fontes.\n */\nexport const fontWeight = {\n regular: \"400\",\n medium: \"500\",\n semibold: \"600\",\n bold: \"700\",\n} as const;\n\n/**\n * Letter-spacing por contexto.\n */\nexport const letterSpacing = {\n tighter: \"-0.02em\",\n tight: \"-0.01em\", // displays e headlines grandes\n normal: \"0em\", // body\n wide: \"0.01em\", // labels, botões\n wider: \"0.03em\",\n widest: \"0.05em\", // overlines, all-caps\n} as const;\n\n/** Escala com named keys — usada por typography.ts */\nexport const fontSize: Record<string, { size: string; lineHeight: string }> = {\n \"2xs\": { size: typeSize(-3), lineHeight: lh(Math.round(BASE * Math.pow(RATIO, -3)), \"loose\") },\n xs: { size: typeSize(-2), lineHeight: lh(Math.round(BASE * Math.pow(RATIO, -2)), \"normal\") },\n sm: { size: typeSize(-1), lineHeight: lh(Math.round(BASE * Math.pow(RATIO, -1)), \"normal\") },\n md: { size: typeSize(0), lineHeight: lh(BASE, \"normal\") },\n lg: { size: typeSize(1), lineHeight: lh(Math.round(BASE * RATIO), \"tight\") },\n xl: { size: typeSize(2), lineHeight: lh(Math.round(BASE * Math.pow(RATIO, 2)), \"tight\") },\n \"2xl\": { size: typeSize(3), lineHeight: lh(Math.round(BASE * Math.pow(RATIO, 3)), \"tight\") },\n \"3xl\": { size: typeSize(4), lineHeight: lh(Math.round(BASE * Math.pow(RATIO, 4)), \"tight\") },\n \"4xl\": { size: typeSize(5), lineHeight: lh(Math.round(BASE * Math.pow(RATIO, 5)), \"tight\") },\n \"5xl\": { size: typeSize(6), lineHeight: lh(Math.round(BASE * Math.pow(RATIO, 6)), \"tight\") },\n};\n","/**\n * typography.ts — Semantic typography tokens (composite)\n *\n * REGRAS:\n * - Presets compostos: combinam fontSize + fontWeight + lineHeight + letterSpacing.\n * - Nomenclatura: {role}-{scale}-{weight?}\n * - Valores em rem (acessibilidade: respeita preferência de fonte do usuário).\n * - display/heading (≥32px desktop) usam clamp() para fluid typography responsiva.\n * - Presets menores usam rem estático (fluid não faz diferença abaixo de 32px).\n * - Line heights de presets fluidos: unitless (escala com o font-size).\n * - Line heights de presets estáticos: rem.\n *\n * HIERARQUIA:\n * display → hero sections, marketing (muito grande, fluid)\n * heading → títulos de página, modais (grande, fluid a partir de sm)\n * title → títulos de card, seção (médio, estático)\n * label → labels de UI, botões, tabs (peso 500, estático)\n * paragraph → texto corrido, parágrafos (peso 400, estático)\n * caption → texto auxiliar, metadados (estático)\n * subheading → categoria acima de conteúdo (uppercase, estático)\n * overline → decorativo (legacy alias para subheading)\n * code → código inline e blocos (estático)\n */\n\nimport { fontWeight, fontFamily, letterSpacing } from \"../primitives/fonts\";\n\n// Tipo base para um preset tipográfico\ninterface TypographyPreset {\n fontSize: string;\n lineHeight: string;\n fontWeight: string;\n letterSpacing: string;\n fontFamily: string;\n}\n\n// ─── Display (fluid — clamp) ─────────────────────────────────────────────────\n// Hero sections, landing pages. Viewport range: 375px → 1280px.\nexport const display: Record<string, TypographyPreset> = {\n \"display-2xl\": {\n fontSize: \"clamp(2.5rem, calc(1.568rem + 3.978vw), 4.75rem)\",\n lineHeight: \"1.1\",\n fontWeight: fontWeight.bold,\n letterSpacing: \"-0.02em\",\n fontFamily: fontFamily.sans,\n },\n \"display-xl\": {\n fontSize: \"clamp(2.25rem, calc(1.603rem + 2.762vw), 3.8125rem)\",\n lineHeight: \"1.1\",\n fontWeight: fontWeight.bold,\n letterSpacing: \"-0.02em\",\n fontFamily: fontFamily.sans,\n },\n \"display-lg\": {\n fontSize: \"clamp(2rem, calc(1.560rem + 1.878vw), 3.0625rem)\",\n lineHeight: \"1.15\",\n fontWeight: fontWeight.semibold,\n letterSpacing: \"-0.01em\",\n fontFamily: fontFamily.sans,\n },\n \"display-md\": {\n fontSize: \"clamp(1.75rem, calc(1.465rem + 1.215vw), 2.4375rem)\",\n lineHeight: \"1.15\",\n fontWeight: fontWeight.semibold,\n letterSpacing: \"-0.01em\",\n fontFamily: fontFamily.sans,\n },\n} as const;\n\n// ─── Heading (fluid sm→xl, estático xs/2xs) ──────────────────────────────────\n// Títulos de página, modais, dialogs.\nexport const heading: Record<string, TypographyPreset> = {\n \"heading-xl\": {\n fontSize: \"clamp(2.25rem, calc(1.732rem + 2.210vw), 3.5rem)\",\n lineHeight: \"1.15\",\n fontWeight: fontWeight.medium,\n letterSpacing: \"-0.01em\",\n fontFamily: fontFamily.sans,\n },\n \"heading-lg\": {\n fontSize: \"clamp(2rem, calc(1.586rem + 1.768vw), 3rem)\",\n lineHeight: \"1.2\",\n fontWeight: fontWeight.medium,\n letterSpacing: \"-0.01em\",\n fontFamily: fontFamily.sans,\n },\n \"heading-md\": {\n fontSize: \"clamp(1.75rem, calc(1.439rem + 1.326vw), 2.5rem)\",\n lineHeight: \"1.2\",\n fontWeight: fontWeight.medium,\n letterSpacing: \"-0.01em\",\n fontFamily: fontFamily.sans,\n },\n \"heading-sm\": {\n fontSize: \"clamp(1.5rem, calc(1.293rem + 0.884vw), 2rem)\",\n lineHeight: \"1.25\",\n fontWeight: fontWeight.medium,\n letterSpacing: \"-0.005em\",\n fontFamily: fontFamily.sans,\n },\n \"heading-xs\": {\n fontSize: \"1.5rem\", // 24px\n lineHeight: \"2rem\", // 32px\n fontWeight: fontWeight.medium,\n letterSpacing: \"0em\",\n fontFamily: fontFamily.sans,\n },\n // NOTE: heading-2xs removido — era duplicata pura de title-lg (ambos 20px/500/0em).\n // Consumidores migrados para text-title-lg.\n} as const;\n\n// ─── Title (estático — rem) ──────────────────────────────────────────────────\n// Títulos de card, seção, sidebar item ativo.\nexport const title: Record<string, TypographyPreset> = {\n \"title-lg\": {\n fontSize: \"1.25rem\", // 20px\n lineHeight: \"1.75rem\", // 28px\n fontWeight: fontWeight.medium,\n letterSpacing: \"0em\",\n fontFamily: fontFamily.sans,\n },\n \"title-md\": {\n fontSize: \"1rem\", // 16px\n lineHeight: \"1.5rem\", // 24px\n fontWeight: fontWeight.medium,\n letterSpacing: \"0em\",\n fontFamily: fontFamily.sans,\n },\n \"title-sm\": {\n fontSize: \"0.875rem\", // 14px\n lineHeight: \"1.25rem\", // 20px\n fontWeight: fontWeight.medium,\n letterSpacing: \"0em\",\n fontFamily: fontFamily.sans,\n },\n} as const;\n\n// ─── Label (estático — rem) ──────────────────────────────────────────────────\n// Labels de UI: botões, inputs, tabs, nav items (peso 500).\nexport const label: Record<string, TypographyPreset> = {\n \"label-xl\": {\n fontSize: \"1.5rem\", // 24px\n lineHeight: \"2rem\", // 32px\n fontWeight: fontWeight.medium,\n letterSpacing: \"-0.015em\",\n fontFamily: fontFamily.sans,\n },\n \"label-lg\": {\n fontSize: \"1.125rem\", // 18px\n lineHeight: \"1.5rem\", // 24px\n fontWeight: fontWeight.medium,\n letterSpacing: \"-0.015em\",\n fontFamily: fontFamily.sans,\n },\n \"label-md\": {\n fontSize: \"1rem\", // 16px\n lineHeight: \"1.5rem\", // 24px\n fontWeight: fontWeight.medium,\n letterSpacing: \"-0.011em\",\n fontFamily: fontFamily.sans,\n },\n \"label-sm\": {\n fontSize: \"0.875rem\", // 14px\n lineHeight: \"1.25rem\", // 20px\n fontWeight: fontWeight.medium,\n letterSpacing: \"-0.006em\",\n fontFamily: fontFamily.sans,\n },\n \"label-xs\": {\n fontSize: \"0.75rem\", // 12px\n lineHeight: \"1rem\", // 16px\n fontWeight: fontWeight.medium,\n letterSpacing: \"0em\",\n fontFamily: fontFamily.sans,\n },\n // ★ NOVO — preenche tier 11px no namespace label (interactive, weight 500).\n // Casos: micro label, hint count, rail tooltip.\n \"label-2xs\": {\n fontSize: \"0.6875rem\", // 11px\n lineHeight: \"0.875rem\", // 14px\n fontWeight: fontWeight.medium,\n letterSpacing: \"0em\",\n fontFamily: fontFamily.sans,\n },\n // ★ NOVO — preenche tier 13px no namespace label (body default interativo do projeto).\n // Casos: button sm, dropdown item, input value, tab default.\n \"label-base\": {\n fontSize: \"0.8125rem\", // 13px\n lineHeight: \"1.125rem\", // 18px\n fontWeight: fontWeight.medium,\n letterSpacing: \"-0.003em\",\n fontFamily: fontFamily.sans,\n },\n} as const;\n\n// ─── Paragraph (estático — rem) ──────────────────────────────────────────────\n// Texto corrido, parágrafos, descrições (peso 400).\nexport const paragraph: Record<string, TypographyPreset> = {\n \"paragraph-xl\": {\n fontSize: \"1.5rem\", // 24px\n lineHeight: \"2rem\", // 32px\n fontWeight: fontWeight.regular,\n letterSpacing: \"-0.015em\",\n fontFamily: fontFamily.sans,\n },\n \"paragraph-lg\": {\n fontSize: \"1.125rem\", // 18px\n lineHeight: \"1.5rem\", // 24px\n fontWeight: fontWeight.regular,\n letterSpacing: \"-0.015em\",\n fontFamily: fontFamily.sans,\n },\n \"paragraph-md\": {\n fontSize: \"1rem\", // 16px\n lineHeight: \"1.5rem\", // 24px\n fontWeight: fontWeight.regular,\n letterSpacing: \"-0.011em\",\n fontFamily: fontFamily.sans,\n },\n \"paragraph-sm\": {\n fontSize: \"0.875rem\", // 14px\n lineHeight: \"1.25rem\", // 20px\n fontWeight: fontWeight.regular,\n letterSpacing: \"-0.006em\",\n fontFamily: fontFamily.sans,\n },\n \"paragraph-xs\": {\n fontSize: \"0.75rem\", // 12px\n lineHeight: \"1rem\", // 16px\n fontWeight: fontWeight.regular,\n letterSpacing: \"0em\",\n fontFamily: fontFamily.sans,\n },\n // ★ NOVO — preenche tier 13px no namespace paragraph (body default do projeto).\n // Casos: body small, msg bubble, table cell, command item, dropdown item.\n \"paragraph-base\": {\n fontSize: \"0.8125rem\", // 13px\n lineHeight: \"1.125rem\", // 18px\n fontWeight: fontWeight.regular,\n letterSpacing: \"-0.003em\",\n fontFamily: fontFamily.sans,\n },\n} as const;\n\n// NOTE: body-* removido — eram aliases legacy de paragraph-*. Sem consumidores.\n\n// ─── Caption (estático — rem) ────────────────────────────────────────────────\n// Texto auxiliar, timestamps, metadados.\nexport const caption: Record<string, TypographyPreset> = {\n \"caption-md\": {\n fontSize: \"0.8125rem\", // 13px\n lineHeight: \"1.125rem\", // 18px\n fontWeight: fontWeight.regular,\n letterSpacing: \"0em\",\n fontFamily: fontFamily.sans,\n },\n \"caption-sm\": {\n fontSize: \"0.6875rem\", // 11px\n lineHeight: \"0.875rem\", // 14px\n fontWeight: fontWeight.regular,\n letterSpacing: \"0em\",\n fontFamily: fontFamily.sans,\n },\n // ★ NOVO — preenche tier 10px (faltava completamente no DS).\n // Casos: micro caption (bubble meta, conv ID, history meta).\n \"caption-xs\": {\n fontSize: \"0.625rem\", // 10px\n lineHeight: \"0.75rem\", // 12px\n fontWeight: fontWeight.regular,\n letterSpacing: \"0em\",\n fontFamily: fontFamily.sans,\n },\n} as const;\n\n// ─── Subheading (estático — rem) ─────────────────────────────────────────────\n// Texto acima de seções (ex: \"CATEGORIAS\", \"NOVO\") — uppercase.\nexport const subheading: Record<string, TypographyPreset> = {\n \"subheading-md\": {\n fontSize: \"1rem\", // 16px\n lineHeight: \"1.5rem\", // 24px\n fontWeight: fontWeight.medium,\n letterSpacing: \"0.06em\",\n fontFamily: fontFamily.sans,\n },\n \"subheading-sm\": {\n fontSize: \"0.875rem\", // 14px\n lineHeight: \"1.25rem\", // 20px\n fontWeight: fontWeight.medium,\n letterSpacing: \"0.06em\",\n fontFamily: fontFamily.sans,\n },\n \"subheading-xs\": {\n fontSize: \"0.75rem\", // 12px\n lineHeight: \"1rem\", // 16px\n fontWeight: fontWeight.medium,\n letterSpacing: \"0.04em\",\n fontFamily: fontFamily.sans,\n },\n \"subheading-2xs\": {\n fontSize: \"0.6875rem\", // 11px\n lineHeight: \"0.75rem\", // 12px\n fontWeight: fontWeight.medium,\n letterSpacing: \"0.02em\",\n fontFamily: fontFamily.sans,\n },\n // ★ NOVO — variante \"strong\" weight 700 + tracking apertado (+0.06em).\n // Substitui o pattern literal `text-[Npx] font-bold tracking-[0.06em] uppercase`.\n // Casos: FILTERS/CATEGORIAS section title, table thead, MenuSidebar section header.\n \"subheading-strong-md\": {\n fontSize: \"0.6875rem\", // 11px\n lineHeight: \"0.875rem\", // 14px\n fontWeight: fontWeight.bold,\n letterSpacing: \"0.06em\",\n fontFamily: fontFamily.sans,\n },\n // ★ NOVO — versão 10px do strong subheading.\n // Casos: chip counter, unread badge, header tab count, agent rank.\n \"subheading-strong-sm\": {\n fontSize: \"0.625rem\", // 10px\n lineHeight: \"0.75rem\", // 12px\n fontWeight: fontWeight.bold,\n letterSpacing: \"0.06em\",\n fontFamily: fontFamily.sans,\n },\n} as const;\n\n// NOTE: overline-* removido — eram aliases legacy de subheading. Sem consumidores.\n\n// ─── Code (estático — rem) ───────────────────────────────────────────────────\nexport const code: Record<string, TypographyPreset> = {\n \"code-md\": {\n fontSize: \"1rem\", // 16px\n lineHeight: \"1.6\",\n fontWeight: fontWeight.regular,\n letterSpacing: \"0em\",\n fontFamily: fontFamily.mono,\n },\n \"code-sm\": {\n fontSize: \"0.8125rem\", // 13px\n lineHeight: \"1.6\",\n fontWeight: fontWeight.regular,\n letterSpacing: \"0em\",\n fontFamily: fontFamily.mono,\n },\n} as const;\n\n// ─── Export agrupado ───────────────────────────────────────────────────────────\nexport const typography = {\n ...display,\n ...heading,\n ...title,\n ...label,\n ...paragraph,\n ...caption,\n ...subheading,\n ...code,\n} as const;\n\nexport type TypographyToken = typeof typography;\nexport type TypographyKey = keyof typeof typography;\n","/**\n * motion.ts — Motion primitive tokens\n * Tier 1 de 3: valores raw. API privada.\n *\n * Princípio: durações baseadas em complexidade da transição.\n * Easings: productive (precisão) vs expressive (fluidez).\n */\n\n/** Durações em ms */\nexport const duration = {\n instant: \"0ms\",\n \"x-fast\": \"100ms\", // hover states, focus rings\n fast: \"150ms\", // simples (opacity, color)\n moderate: \"200ms\", // entradas de elementos\n slow: \"300ms\", // modais, drawers, expansões\n \"x-slow\": \"400ms\", // page transitions\n deliberate: \"500ms\", // animações complexas, onboarding\n} as const;\n\n/**\n * Easing curves.\n * Productive: movimentos precisos (UI transacional).\n * Expressive: movimentos fluidos (marketing, onboarding).\n */\nexport const easing = {\n // Productive\n \"standard\": \"cubic-bezier(0.2, 0, 0.38, 0.9)\", // entra e sai\n \"entrance-productive\": \"cubic-bezier(0, 0, 0.38, 0.9)\", // entra\n \"exit-productive\": \"cubic-bezier(0.2, 0, 1, 0.9)\", // sai\n\n // Expressive\n \"emphasized\": \"cubic-bezier(0.2, 0, 0, 1)\", // enfatizado\n \"emphasized-decelerate\": \"cubic-bezier(0.05, 0.7, 0.1, 1)\",// entra (expressive)\n \"emphasized-accelerate\": \"cubic-bezier(0.3, 0, 0.8, 0.15)\",// sai (expressive)\n\n // Utilitários\n \"linear\": \"linear\",\n \"spring\": \"cubic-bezier(0.175, 0.885, 0.32, 1.275)\", // ligeiro bounce\n} as const;\n\n/** Tokens compostos: duração + easing para padrões comuns */\nexport const motionPresets = {\n // Component transitions (button, badge, input, switch)\n \"component\": `${duration.moderate} ease-out`,\n // Color shift (tabs item color)\n \"color-shift\": `${duration.slow} ease-out`,\n // Spring (tabs indicator slide)\n \"spring\": `${duration.slow} cubic-bezier(0.65, 0, 0.35, 1)`,\n // Existing presets\n \"hover-color\": `${duration.fast} ${easing.standard}`,\n \"hover-transform\": `${duration[\"x-fast\"]} ${easing[\"entrance-productive\"]}`,\n \"fade-in\": `${duration.moderate} ${easing[\"emphasized-decelerate\"]}`,\n \"fade-out\": `${duration.fast} ${easing[\"emphasized-accelerate\"]}`,\n \"slide-in\": `${duration.slow} ${easing[\"emphasized-decelerate\"]}`,\n \"slide-out\": `${duration.moderate} ${easing[\"emphasized-accelerate\"]}`,\n \"expand\": `${duration.slow} ${easing.emphasized}`,\n \"collapse\": `${duration.moderate} ${easing[\"emphasized-accelerate\"]}`,\n} as const;\n"],"names":["bg","fg","border","ring","overlay"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tokens.mjs","sources":["../tokens/brands/default/primitives/color-palette.ts","../tokens/brands/default/semantic/color-light.ts","../tokens/brands/default/semantic/color-dark.ts","../tokens/brands/default/primitives/scales.ts","../tokens/brands/default/semantic/spacing.ts","../tokens/brands/default/semantic/sizing.ts","../tokens/brands/default/semantic/shape.ts","../tokens/brands/default/semantic/elevation.ts","../tokens/brands/default/primitives/fonts.ts","../tokens/brands/default/semantic/typography.ts","../tokens/brands/default/primitives/motion.ts"],"sourcesContent":["/**\n * color-palette.ts — Primitive color tokens (v3)\n * Tier 1 de 3: valores raw. API privada.\n *\n * Nunca referenciar diretamente em componentes.\n * Componentes usam semantic tokens (color-light / color-dark).\n *\n * Formato: OKLCH (perceptualmente uniforme, suporte P3, ideal para color-mix())\n *\n * Escala 50–950 (12 níveis com 150 extra):\n * 50 → quase branco\n * 500/600 → tom médio (referência de identidade — varia por cor)\n * 950 → quase preto\n *\n * NAMING V3:\n * brand → cor da marca (verde escuro #00803c — light theme)\n * brandContrast → variante brilhante (verde #0fc589 — dark theme)\n * gray → neutro puro (chroma 0)\n * danger → feedback destrutivo/erro (vermelho)\n * success / warning / info → feedback positivo / atenção / informação\n */\n\n// ─── Brand — base oklch(0.5248 0.1415 150.9) em 600 (verde escuro #00803c) ────\nexport const brand = {\n 50: \"oklch(0.97 0.022 151)\",\n 100: \"oklch(0.93 0.045 151)\",\n 150: \"oklch(0.90 0.060 151)\",\n 200: \"oklch(0.85 0.085 151)\",\n 300: \"oklch(0.76 0.115 151)\",\n 400: \"oklch(0.65 0.135 151)\",\n 500: \"oklch(0.58 0.140 151)\",\n 600: \"oklch(0.5248 0.1415 150.9)\", // BASE — identidade light\n 700: \"oklch(0.43 0.130 151)\",\n 800: \"oklch(0.34 0.110 151)\",\n 900: \"oklch(0.24 0.080 151)\",\n 950: \"oklch(0.16 0.055 151)\",\n} as const;\n\n// ─── Brand Contrast — base oklch(0.7289 0.1571 162.3) em 400 (verde brilhante #0fc589) ──\n// Usado no dark theme como cor primária. Hue 162 (ligeiramente diferente do brand 151).\nexport const brandContrast = {\n 50: \"oklch(0.97 0.025 162)\",\n 100: \"oklch(0.94 0.050 162)\",\n 150: \"oklch(0.91 0.075 162)\",\n 200: \"oklch(0.86 0.100 162)\",\n 300: \"oklch(0.79 0.130 162)\",\n 400: \"oklch(0.7289 0.1571 162.3)\", // BASE — identidade dark\n 500: \"oklch(0.65 0.155 162)\",\n 600: \"oklch(0.55 0.140 162)\",\n 700: \"oklch(0.45 0.115 162)\",\n 800: \"oklch(0.34 0.085 162)\",\n 900: \"oklch(0.24 0.060 162)\",\n 950: \"oklch(0.16 0.040 162)\",\n} as const;\n\n// ─── Gray — neutro puro (chroma 0) ────────────────────────────────────────────\nexport const gray = {\n 50: \"oklch(0.973 0 0)\",\n 100: \"oklch(0.94 0 0)\",\n 150: \"oklch(0.931 0 0)\",\n 200: \"oklch(0.9076 0 0)\",\n 300: \"oklch(0.8761 0 0)\",\n 400: \"oklch(0.7025 0 0)\",\n 500: \"oklch(0.4997 0 0)\",\n 600: \"oklch(0.36 0 0)\",\n 700: \"oklch(0.30 0 0)\",\n 800: \"oklch(0.2645 0 0)\",\n 900: \"oklch(0.205 0 0)\",\n 950: \"oklch(0.15 0 0)\",\n} as const;\n\n// ─── Danger — base oklch(0.6368 0.2078 25.33) em 500 (vermelho hue 25) ────────\nexport const danger = {\n 50: \"oklch(0.97 0.025 25)\",\n 100: \"oklch(0.94 0.050 25)\",\n 150: \"oklch(0.91 0.080 25)\",\n 200: \"oklch(0.86 0.110 25)\",\n 300: \"oklch(0.76 0.165 25)\",\n 400: \"oklch(0.69 0.195 25)\",\n 500: \"oklch(0.6368 0.2078 25.33)\", // BASE\n 600: \"oklch(0.56 0.200 25)\",\n 700: \"oklch(0.46 0.180 25)\",\n 800: \"oklch(0.36 0.140 25)\",\n 900: \"oklch(0.26 0.100 25)\",\n 950: \"oklch(0.18 0.070 25)\",\n} as const;\n\n// ─── Success — base oklch(0.66 0.135 161) em 500 (verde teal hue 161) ─────────\nexport const success = {\n 50: \"oklch(0.96 0.025 161)\",\n 100: \"oklch(0.93 0.045 161)\",\n 150: \"oklch(0.90 0.065 161)\",\n 200: \"oklch(0.85 0.090 161)\",\n 300: \"oklch(0.77 0.115 161)\",\n 400: \"oklch(0.71 0.130 161)\",\n 500: \"oklch(0.66 0.135 161)\", // BASE\n 600: \"oklch(0.57 0.130 161)\",\n 700: \"oklch(0.47 0.110 161)\",\n 800: \"oklch(0.37 0.085 161)\",\n 900: \"oklch(0.27 0.060 161)\",\n 950: \"oklch(0.19 0.045 161)\",\n} as const;\n\n// ─── Warning — base oklch(0.81 0.160 81) em 500 (amarelo-laranja hue 81) ──────\nexport const warning = {\n 50: \"oklch(0.97 0.030 81)\",\n 100: \"oklch(0.95 0.060 81)\",\n 150: \"oklch(0.93 0.090 81)\",\n 200: \"oklch(0.91 0.115 81)\",\n 300: \"oklch(0.86 0.150 81)\",\n 400: \"oklch(0.83 0.155 81)\",\n 500: \"oklch(0.81 0.160 81)\", // BASE\n 600: \"oklch(0.71 0.155 81)\",\n 700: \"oklch(0.59 0.135 81)\",\n 800: \"oklch(0.46 0.110 81)\",\n 900: \"oklch(0.34 0.085 81)\",\n 950: \"oklch(0.24 0.060 81)\",\n} as const;\n\n// ─── Info — base oklch(0.62 0.210 280) em 500 (roxo hue 280) ──────────────────\nexport const info = {\n 50: \"oklch(0.97 0.025 280)\",\n 100: \"oklch(0.93 0.050 280)\",\n 150: \"oklch(0.89 0.085 280)\",\n 200: \"oklch(0.85 0.110 280)\",\n 300: \"oklch(0.76 0.155 280)\",\n 400: \"oklch(0.69 0.190 280)\",\n 500: \"oklch(0.62 0.210 280)\", // BASE\n 600: \"oklch(0.55 0.200 280)\",\n 700: \"oklch(0.46 0.170 280)\",\n 800: \"oklch(0.37 0.135 280)\",\n 900: \"oklch(0.27 0.095 280)\",\n 950: \"oklch(0.19 0.070 280)\",\n} as const;\n\n// ─── Universais puros ─────────────────────────────────────────────────────────\nexport const white = \"oklch(1 0 0)\";\nexport const black = \"oklch(0 0 0)\";\n\n// ─── Alpha (overlays / scrim — só black e white com OKLCH slash alpha) ────────\nexport const alpha = {\n black: {\n 4: \"oklch(0 0 0 / 0.04)\",\n 8: \"oklch(0 0 0 / 0.08)\",\n 12: \"oklch(0 0 0 / 0.12)\",\n 16: \"oklch(0 0 0 / 0.16)\",\n 24: \"oklch(0 0 0 / 0.24)\",\n 32: \"oklch(0 0 0 / 0.32)\",\n 40: \"oklch(0 0 0 / 0.40)\",\n 45: \"oklch(0 0 0 / 0.45)\",\n 48: \"oklch(0 0 0 / 0.48)\",\n 55: \"oklch(0 0 0 / 0.55)\",\n 64: \"oklch(0 0 0 / 0.64)\",\n },\n white: {\n 1: \"oklch(1 0 0 / 0.01)\",\n 2: \"oklch(1 0 0 / 0.02)\",\n 3: \"oklch(1 0 0 / 0.03)\",\n 4: \"oklch(1 0 0 / 0.04)\",\n 8: \"oklch(1 0 0 / 0.08)\",\n 12: \"oklch(1 0 0 / 0.12)\",\n 16: \"oklch(1 0 0 / 0.16)\",\n 24: \"oklch(1 0 0 / 0.24)\",\n 32: \"oklch(1 0 0 / 0.32)\",\n },\n} as const;\n\nexport const colorPalette = {\n brand, brandContrast, gray,\n success, warning, danger, info,\n white, black,\n alpha,\n};\n","/**\n * color-light.ts — Semantic color tokens (light mode) — V3\n * Tier 2 de 3: intenção. API pública.\n *\n * NOMENCLATURA V3:\n * brand → cor da marca (NÃO \"primary\")\n * danger → feedback destrutivo (NÃO \"critical\")\n * fg.default → texto padrão (NÃO \"fg.foreground\")\n * on-* → texto sobre cor sólida\n * subtle/muted → variantes alpha-tinted (color-mix da cor base)\n * hover → escurece cor sólida (mix com black) ou sobe alpha\n *\n * NAMESPACES:\n * bg → fundos de superfícies, brand, status, neutros\n * fg → texto + ícones\n * border → bordas, dividers\n * ring → focus rings (acessibilidade)\n * overlay → scrims de modal/drawer\n */\n\nimport {\n brand, gray, success, warning, danger, info,\n white, black,\n} from \"../primitives/color-palette\";\n\n// ─── Background ───────────────────────────────────────────────────────────────\n\nexport const bg = {\n // Surfaces (sólidos)\n canvas: white, // body, página\n surface: white, // cards, drawer\n \"surface-elevated\": white, // popovers, modais\n \"surface-panels\": white, // página de fundo\n sidebar: \"oklch(0.9516 0.0027 106.45)\", // mineral-100 — calidez sidebar (sem primitive equiv)\n\n // Backgrounds neutros (sólidos cinza no light)\n subtle: gray[50],\n muted: gray[50],\n emphasis: gray[100], // neutro mais visível que muted (sem semântica de \"active\")\n input: white,\n accent: white, // light: bg-accent = branco (item ativo destaca por contraste)\n\n // Brand (derivam do brand[600])\n brand: brand[600],\n \"brand-subtle\": `color-mix(in oklch, ${brand[600]} 14%, transparent)`,\n \"brand-hover\": `color-mix(in oklch, ${brand[600]} 90%, black)`,\n \"brand-subtle-hover\": `color-mix(in oklch, ${brand[600]} 22%, transparent)`,\n\n // Status (sólido + muted alpha — ×4 cores)\n danger: danger[500],\n \"danger-muted\": `color-mix(in oklch, ${danger[500]} 14%, transparent)`,\n \"danger-hover\": `color-mix(in oklch, ${danger[500]} 90%, black)`,\n \"danger-muted-hover\": `color-mix(in oklch, ${danger[500]} 22%, transparent)`,\n\n success: success[500],\n \"success-muted\": `color-mix(in oklch, ${success[500]} 14%, transparent)`,\n \"success-hover\": `color-mix(in oklch, ${success[500]} 90%, black)`,\n \"success-muted-hover\": `color-mix(in oklch, ${success[500]} 22%, transparent)`,\n\n warning: warning[500],\n \"warning-muted\": `color-mix(in oklch, ${warning[500]} 14%, transparent)`,\n \"warning-hover\": `color-mix(in oklch, ${warning[500]} 90%, black)`,\n \"warning-muted-hover\": `color-mix(in oklch, ${warning[500]} 22%, transparent)`,\n\n info: info[500],\n \"info-muted\": `color-mix(in oklch, ${info[500]} 14%, transparent)`,\n \"info-hover\": `color-mix(in oklch, ${info[500]} 90%, black)`,\n \"info-muted-hover\": `color-mix(in oklch, ${info[500]} 22%, transparent)`,\n\n // Hover dos neutros — sólidos cinza no light\n \"muted-hover\": \"oklch(0.95 0 0)\",\n \"input-hover\": gray[50], // 0.973 — sutil sobre input=white\n \"accent-hover\": \"oklch(0.84 0 0)\",\n\n // Sidebar item states — active = branco (contrasta com sidebar mineral-100), hover = mineral subtle\n \"sidebar-accent\": white,\n \"sidebar-accent-hover\": \"oklch(0.92 0.0068 115.72)\",\n\n // Tabela — sólidos\n \"table\": white,\n \"table-head\": gray[50],\n // Hover sutil: gray[50] (~2.7% diff de white) em vez de gray[100] (6% — forte demais).\n // Mesmo tom do table-head, mantém hierarquia visual sem competir com cells selected.\n \"table-row-hover\": gray[50],\n // Linha selecionada — alpha brand discreto (6%); hover sobe pra 10%\n // (não usar `bg-brand-subtle` 14% — forte demais como bg de row)\n \"table-row-selected\": `color-mix(in oklch, ${brand[600]} 6%, transparent)`,\n \"table-row-selected-hover\": `color-mix(in oklch, ${brand[600]} 10%, transparent)`,\n\n // Dropdown/Popover — referencia bg-canvas (white no light)\n \"dropdown\": \"var(--color-bg-canvas)\",\n} as const;\n\n// ─── Foreground (texto + ícones) ──────────────────────────────────────────────\n\nexport const fg = {\n // Hierarquia\n strong: gray[950],\n default: gray[950],\n muted: gray[500], // labels, helpers (light)\n subtle: gray[400], // placeholders, hints\n disabled: gray[400],\n\n // Brand\n brand: brand[600],\n\n // Status\n danger: danger[500],\n success: success[500],\n warning: warning[500],\n info: info[500],\n\n // Sobre fundos sólidos (on-*)\n \"on-brand\": white,\n \"on-danger\": white,\n \"on-success\": white,\n \"on-warning\": black, // amarelo claro → preto pra contraste\n \"on-info\": white,\n} as const;\n\n// ─── Border ───────────────────────────────────────────────────────────────────\n\nexport const border = {\n default: gray[200], // borda padrão\n subtle: gray[150], // dividers, controles\n input: gray[300], // inputs / fields\n sidebar: \"oklch(0.9076 0.0068 115.72)\", // mineral-200\n\n brand: brand[600],\n \"brand-subtle\": `color-mix(in oklch, ${brand[600]} 36%, transparent)`,\n\n \"danger-muted\": `color-mix(in oklch, ${danger[500]} 36%, transparent)`,\n \"success-muted\": `color-mix(in oklch, ${success[500]} 36%, transparent)`,\n \"warning-muted\": `color-mix(in oklch, ${warning[500]} 36%, transparent)`,\n \"info-muted\": `color-mix(in oklch, ${info[500]} 36%, transparent)`,\n\n // Tabela\n table: gray[150],\n} as const;\n\n// ─── Ring (focus rings — cor pura usada com ring-* do Tailwind) ───────────────\n\nexport const ring = {\n brand: `color-mix(in oklch, ${brand[600]} 22%, transparent)`,\n danger: `color-mix(in oklch, ${danger[500]} 22%, transparent)`,\n success: `color-mix(in oklch, ${success[500]} 22%, transparent)`,\n warning: `color-mix(in oklch, ${warning[500]} 22%, transparent)`,\n info: `color-mix(in oklch, ${info[500]} 22%, transparent)`,\n secondary: `color-mix(in oklch, ${gray[500]} 22%, transparent)`,\n} as const;\n\n// ─── Overlay / Scrim ──────────────────────────────────────────────────────────\n\nexport const overlay = {\n // Scrim de backdrop (modais, drawers)\n scrim: \"oklch(0 0 0 / 0.55)\",\n // Outline de 6px pra elementos flutuantes (panels, dropdowns, command, modais)\n // — consumido pela utility `outline-float`. Light: cinza medium 12%.\n // Valor anterior (6%) era visualmente imperceptível em backgrounds claros;\n // 12% mantém o efeito \"halo sutil\" mas com presença visual real.\n float: \"oklch(0.55 0 0 / 0.12)\",\n} as const;\n\nexport const colorLight = { bg, fg, border, ring, overlay };\n","/**\n * color-dark.ts — Semantic color tokens (dark mode) — V3\n * Tier 2 de 3: intenção. API pública.\n *\n * Mesmo contrato de nomes que color-light.ts. Só muda os valores.\n * Dark mode usa brandContrast (verde brilhante #0fc589) em vez de brand.\n *\n * MECÂNICA V3:\n * - Surfaces sólidas (gray-900 e variantes)\n * - Backgrounds neutros como alpha-overlay (oklch(1 0 0 / X)) que se adaptam à surface\n * - Brand/status muted via color-mix da cor base com transparent\n * - Hover de sólidos: clareiam (mix com white)\n * - Hover de alphas: sobem 1 tier\n */\n\nimport {\n brandContrast, gray, success, warning, danger, info,\n white, black,\n} from \"../primitives/color-palette\";\n\n// ─── Background ───────────────────────────────────────────────────────────────\n\nexport const bg = {\n // Surfaces sólidas\n canvas: gray[900], // body\n surface: \"oklch(0.225 0 0)\", // cards, drawer (entre gray-900 e gray-800)\n \"surface-elevated\": \"oklch(0.225 0 0)\",\n \"surface-panels\": gray[900],\n sidebar: \"oklch(0.225 0 0)\",\n\n // Backgrounds neutros (alpha overlay — adapta ao surface debaixo)\n subtle: \"oklch(1 0 0 / 0.01)\",\n muted: \"oklch(1 0 0 / 0.03)\",\n emphasis: `color-mix(in oklch, ${white} 12%, transparent)`, // mesmo visual do bg-accent (sem semântica de \"active\")\n input: \"oklch(1 0 0 / 0.04)\",\n accent: \"oklch(1 0 0 / 0.12)\",\n\n // Brand (dark usa brandContrast — verde brilhante)\n brand: brandContrast[400],\n \"brand-subtle\": `color-mix(in oklch, ${brandContrast[400]} 14%, transparent)`,\n \"brand-hover\": `color-mix(in oklch, ${brandContrast[400]} 90%, black)`,\n \"brand-subtle-hover\": `color-mix(in oklch, ${brandContrast[400]} 22%, transparent)`,\n\n // Status (sólido + muted alpha — ×4 cores)\n danger: danger[500],\n \"danger-muted\": `color-mix(in oklch, ${danger[500]} 14%, transparent)`,\n \"danger-hover\": `color-mix(in oklch, ${danger[500]} 90%, white)`,\n \"danger-muted-hover\": `color-mix(in oklch, ${danger[500]} 22%, transparent)`,\n\n success: success[500],\n \"success-muted\": `color-mix(in oklch, ${success[500]} 14%, transparent)`,\n \"success-hover\": `color-mix(in oklch, ${success[500]} 90%, white)`,\n \"success-muted-hover\": `color-mix(in oklch, ${success[500]} 22%, transparent)`,\n\n warning: warning[500],\n \"warning-muted\": `color-mix(in oklch, ${warning[500]} 14%, transparent)`,\n \"warning-hover\": `color-mix(in oklch, ${warning[500]} 90%, white)`,\n \"warning-muted-hover\": `color-mix(in oklch, ${warning[500]} 22%, transparent)`,\n\n info: info[500],\n \"info-muted\": `color-mix(in oklch, ${info[500]} 14%, transparent)`,\n \"info-hover\": `color-mix(in oklch, ${info[500]} 90%, white)`,\n \"info-muted-hover\": `color-mix(in oklch, ${info[500]} 22%, transparent)`,\n\n // Hover dos neutros — alphas sobem 1 tier\n \"muted-hover\": \"oklch(1 0 0 / 0.08)\",\n \"input-hover\": \"oklch(1 0 0 / 0.08)\",\n \"accent-hover\": \"oklch(1 0 0 / 0.16)\",\n\n // Sidebar item states — alphas\n \"sidebar-accent\": \"oklch(1 0 0 / 0.08)\",\n \"sidebar-accent-hover\": \"oklch(1 0 0 / 0.12)\",\n\n // Tabela — sólidos pra suportar sticky columns sem vazamento\n \"table\": \"oklch(0.225 0 0)\", // mesmo bg-surface\n \"table-head\": \"oklch(0.252 0 0)\", // gray-850 — head sticky\n \"table-row-hover\": \"oklch(0.252 0 0)\",\n // Linha selecionada — alpha brandContrast 10%; hover sobe pra 14%\n // (no dark precisa de alpha levemente maior pra ficar visível sobre surface escuro)\n \"table-row-selected\": `color-mix(in oklch, ${brandContrast[400]} 10%, transparent)`,\n \"table-row-selected-hover\": `color-mix(in oklch, ${brandContrast[400]} 14%, transparent)`,\n\n // Dropdown/Popover — frosted-glass: bg-canvas com 70% opacidade\n // (combina com backdrop-blur no componente pra efeito vidro fosco)\n \"dropdown\": \"color-mix(in oklab, var(--color-bg-canvas) 70%, transparent)\",\n} as const;\n\n// ─── Foreground (texto + ícones) ──────────────────────────────────────────────\n\nexport const fg = {\n // Hierarquia\n strong: white, // 100% — títulos\n default: \"oklch(0.98 0 0)\", // texto padrão (sem primitive equiv exato)\n muted: gray[400], // labels, helpers\n subtle: `color-mix(in oklch, ${gray[400]} 70%, transparent)`, // placeholders\n disabled: gray[600],\n\n // Brand\n brand: brandContrast[400],\n\n // Status\n danger: danger[500],\n success: success[500],\n warning: warning[500],\n info: info[500],\n\n // Sobre fundos sólidos (on-*) — dark inverte: verde brilhante, vermelho saturado, etc\n \"on-brand\": black, // preto sobre verde brilhante\n \"on-danger\": white,\n \"on-success\": black,\n \"on-warning\": black,\n \"on-info\": white,\n} as const;\n\n// ─── Border ───────────────────────────────────────────────────────────────────\n\nexport const border = {\n default: gray[800],\n subtle: \"oklch(1 0 0 / 0.04)\",\n input: \"oklch(1 0 0 / 0.08)\",\n sidebar: gray[800],\n\n brand: brandContrast[400],\n \"brand-subtle\": `color-mix(in oklch, ${brandContrast[400]} 36%, transparent)`,\n\n \"danger-muted\": `color-mix(in oklch, ${danger[500]} 36%, transparent)`,\n \"success-muted\": `color-mix(in oklch, ${success[500]} 36%, transparent)`,\n \"warning-muted\": `color-mix(in oklch, ${warning[500]} 36%, transparent)`,\n \"info-muted\": `color-mix(in oklch, ${info[500]} 36%, transparent)`,\n\n // Tabela\n table: gray[800],\n} as const;\n\n// ─── Ring (focus rings — cor pura usada com ring-* do Tailwind) ───────────────\n\nexport const ring = {\n brand: `color-mix(in oklch, ${brandContrast[400]} 22%, transparent)`,\n danger: `color-mix(in oklch, ${danger[500]} 22%, transparent)`,\n success: `color-mix(in oklch, ${success[500]} 22%, transparent)`,\n warning: `color-mix(in oklch, ${warning[500]} 22%, transparent)`,\n info: `color-mix(in oklch, ${info[500]} 22%, transparent)`,\n secondary: `color-mix(in oklch, ${gray[500]} 22%, transparent)`,\n} as const;\n\n// ─── Overlay / Scrim ──────────────────────────────────────────────────────────\n\nexport const overlay = {\n // Scrim de backdrop (modais, drawers)\n scrim: \"oklch(0 0 0 / 0.55)\",\n // Outline de 6px pra elementos flutuantes (panels, dropdowns, command, modais)\n // — consumido pela utility `outline-float`. Dark: branco 8%.\n // Valor anterior (4%) era visualmente imperceptível em surfaces escuras;\n // 8% mantém o efeito \"halo sutil\" mas com presença visual real.\n float: \"oklch(1 0 0 / 0.08)\",\n} as const;\n\nexport const colorDark = { bg, fg, border, ring, overlay };\n","/**\n * scales.ts — Spatial scale (base-4 system)\n * Tier 1 de 3: valores raw. API privada.\n *\n * Princípio: todo valor espacial é múltiplo de 4px.\n *\n * Uso: importar sp() nos arquivos semantic (spacing.ts, sizing.ts, shape.ts).\n * Nunca usar sp() diretamente em componentes.\n *\n * Fórmula: sp(n) = n * 4px\n */\n\nconst BASE = 4; // px\n\n/** Retorna valor em px como string */\nexport const sp = (n: number): string => `${n * BASE}px`;\n\n/**\n * Escala completa: 0 a 80 (0px a 320px)\n * Usar sp() ao invés desta tabela nos tokens semânticos.\n * Esta tabela existe para referência e documentação.\n */\nexport const scale = {\n 0: sp(0), // 0px\n 0.5: sp(0.5), // 2px ← hairline\n 1: sp(1), // 4px ← xs\n 1.5: sp(1.5), // 6px\n 2: sp(2), // 8px ← sm\n 2.5: sp(2.5), // 10px\n 3: sp(3), // 12px ← md\n 3.5: sp(3.5), // 14px\n 4: sp(4), // 16px ← base (1 unit)\n 5: sp(5), // 20px\n 6: sp(6), // 24px ← lg\n 7: sp(7), // 28px\n 8: sp(8), // 32px ← xl\n 9: sp(9), // 36px\n 10: sp(10), // 40px\n 11: sp(11), // 44px ← touch target min\n 12: sp(12), // 48px ← touch target ideal\n 14: sp(14), // 56px\n 16: sp(16), // 64px\n 18: sp(18), // 72px\n 20: sp(20), // 80px\n 24: sp(24), // 96px\n 28: sp(28), // 112px\n 32: sp(32), // 128px\n 40: sp(40), // 160px\n 48: sp(48), // 192px\n 56: sp(56), // 224px\n 64: sp(64), // 256px\n 80: sp(80), // 320px\n} as const;\n","/**\n * spacing.ts — Semantic spacing tokens\n *\n * REGRAS:\n * - Todos os valores derivam de scales.ts.\n * - 3 conceitos: space (genérico), gap (entre items), pad (padding).\n * - Os 3 compartilham a MESMA escala de valores.\n * - O prefixo (sp-, gp-, pad-) diferencia o papel no CSS.\n *\n * ESCALA UNIFICADA:\n * 2xs=2 xs=4 sm=6 md=8 lg=10 xl=12 2xl=16 3xl=20 4xl=24 5xl=28 6xl=32 7xl=48\n *\n * CONVENÇÃO DE PAPÉIS:\n * space → genérico (margin, padding simétrico, offsets)\n * gap → entre filhos flex/grid, icon-to-label, section spacing\n * pad → padding interno de componente\n */\n\nimport { scale } from \"../primitives/scales\";\n\n// Escala unificada: 2 4 6 8 10 12 16 20 24 28 32 48\nconst unified = {\n \"2xs\": scale[0.5], // 2px — hairline, border-like gaps\n xs: scale[1], // 4px — icon-to-text tight, checkbox gap, tag gap\n sm: scale[1.5], // 6px — button icon gap (xxs/xs), badge gap, tabs\n md: scale[2], // 8px — button icon gap (sm/md), form field gap, input padding\n lg: scale[2.5], // 10px — compact card padding\n xl: scale[3], // 12px — button padding (xs), info box gap, card row gap\n \"2xl\": scale[4], // 16px — card padding (sm), section gap, info box padding\n \"3xl\": scale[5], // 20px — spacer médio\n \"4xl\": scale[6], // 24px — card gap padrão, card padding (default), section gap\n \"5xl\": scale[7], // 28px — spacer grande\n \"6xl\": scale[8], // 32px — section major gap\n \"7xl\": scale[12], // 48px — page-level gap\n} as const;\n\n// ─── Space (escala genérica) ─────────────────────────────────────────────────\nexport const space = {\n base: scale[4], // 16px — DEFAULT: uma unidade espacial do sistema\n 0: scale[0],\n px: { px: \"1px\", raw: 1 },\n ...unified,\n} as const;\n\n// ─── Gap (entre items) ──────────────────────────────────────────────────────\nexport const gap = {\n base: scale[6], // 24px — DEFAULT: card/section internal gap\n ...unified,\n} as const;\n\n// ─── Pad (padding de componente) ─────────────────────────────────────────────\nexport const pad = {\n base: scale[3], // 12px — DEFAULT: button/input padding horizontal\n ...unified,\n} as const;\n\n// Export agrupado\nexport const spacing = { space, gap, pad } as const;\nexport type SpacingToken = typeof spacing;\n","/**\n * sizing.ts — Escala genérica de dimensões de componente\n *\n * REGRAS:\n * - Escala única `comp` para h-*, w-*, size-* (height, width, square).\n * - Baseada em scales.ts (base-4 system).\n * - Heights são min-height (componentes crescem com conteúdo).\n * - WCAG 2.1 AA: mínimo 44px de touch target para interativos.\n *\n * Tokens orientados a componente específico (form, layout, icon, container)\n * ficam em components/sizing.ts.\n */\n\nimport { scale } from \"../primitives/scales\";\n\n// ─── Comp (escala genérica de dimensão) ──────────────────────────────────────\n// Gera: h-comp-*, w-comp-*, size-comp-*, min-h-comp-*\nexport const comp = {\n base: scale[10], // 40px — DEFAULT: button md, input md (desktop)\n \"3xs\": scale[4], // 16px — badge micro\n \"2xs\": scale[5], // 20px — badge md, switch\n xs: scale[6], // 24px — compact chip, small tag\n sm: scale[7], // 28px — tabs item\n md: scale[8], // 32px — button xs, input xs\n lg: scale[9], // 36px — button sm, input sm\n xl: scale[10], // 40px — mesmo valor que base\n \"2xl\": scale[11], // 44px — WCAG touch target\n \"3xl\": scale[12], // 48px — confortável\n \"4xl\": scale[14], // 56px — hero CTA\n} as const;\n\nexport const sizing = { comp } as const;\nexport type SizingToken = typeof sizing;\n","/**\n * shape.ts — Shape tokens (border-radius + border-width)\n *\n * REGRAS:\n * - border-radius e border-width ficam juntos porque definem a \"forma\" visual.\n * Quando um muda, o outro costuma mudar — são co-dependentes de tema.\n * - Nomenclatura: base (default), none, xs, sm, md, lg, xl, 2xl, 3xl, 4xl, full.\n *\n * FILOSOFIA DE FORMA:\n * O sistema usa um \"knob\" central (RADIUS_BASE = 0.625rem = 10px).\n * Todos os steps são derivados por multiplicador.\n * Mudar RADIUS_BASE escala toda a personalidade do sistema.\n *\n * `base` = radius padrão de componentes interativos (buttons, cards, inputs, dialogs).\n * Escala numérica (xs→4xl) existe para casos onde se precisa de um radius específico.\n *\n * RELAÇÃO form height → radius:\n * xl (44px) → base (10px)\n * lg (40px) → base (10px)\n * md (36px) → base (10px)\n * sm (32px) → md (8px)\n * xs (28px) → md (8px)\n */\n\n// ─── Radius ───────────────────────────────────────────────────────────────────\n/**\n * Knob central do sistema — controla a \"personalidade de forma\" (sharp → pill).\n * Alterar este valor escala toda a curva de radius proporcionalmente.\n * O transform to-tailwind-v4 gera calc(RADIUS_BASE * N) para cada step.\n */\nexport const RADIUS_BASE = \"0.625rem\"; // 10px — mesma ref do shadcn\n\nexport const radius = {\n base: RADIUS_BASE, // 10px — DEFAULT componentes interativos (= lg)\n none: \"0px\", // 0px — sharp corners\n xs: `${RADIUS_BASE} * 0.4`, // 4px — sutil\n sm: `${RADIUS_BASE} * 0.6`, // 6px — tabs indicator\n md: `${RADIUS_BASE} * 0.8`, // 8px — inputs menores\n lg: RADIUS_BASE, // 10px — igual ao knob (alias de base)\n xl: `${RADIUS_BASE} * 1.4`, // 14px — modais, painéis\n \"2xl\": `${RADIUS_BASE} * 1.8`, // 18px — textarea, select content\n \"3xl\": `${RADIUS_BASE} * 2.2`, // 22px — badges, componentes menores\n \"4xl\": `${RADIUS_BASE} * 2.6`, // 26px — antigo valor de base (retido pra casos específicos)\n full: \"9999px\", // pill — avatars, chips\n} as const;\n\n// ─── Border Width ──────────────────────────────────────────────────────────────\nexport const borderWidth = {\n none: \"0px\",\n xs: \"1px\", // padrão — separadores, inputs, cards\n sm: \"2px\", // ênfase — foco, hover de botão outline\n md: \"4px\", // forte — accent, progress indicator\n} as const;\n\n// ─── Outline (focus ring) ──────────────────────────────────────────────────────\n// Separado de border porque tem semântica de acessibilidade própria\nexport const outline = {\n width: \"2px\", // largura do outline de foco\n offset: \"2px\", // espaço entre elemento e outline\n style: \"solid\",\n} as const;\n\n// ─── Divider ───────────────────────────────────────────────────────────────────\nexport const divider = {\n width: \"1px\",\n style: \"solid\",\n} as const;\n\nexport const shape = { radius, RADIUS_BASE, borderWidth, outline, divider } as const;\nexport type ShapeToken = typeof shape;\n","/**\n * elevation.ts — Elevation tokens (shadows + opacity + blur + z-index) — V3\n *\n * REGRAS:\n * - Shadows ficam juntos com opacity porque definem \"elevação\".\n * - Shadows usam string literal pra parsing em build time.\n * - Múltiplas shadows por camada (ambient + key light).\n * - Dark mode: opacidade ~2-3x maior (sombras precisam ser mais fortes em fundo escuro).\n *\n * NOTA: Shadows usam OKLCH com slash alpha — formato moderno, suporte amplo.\n *\n * HIERARQUIA DE ELEVAÇÃO (V3):\n * none → sem elevação\n * sm → controles, botões em repouso\n * md → cards em repouso, tooltips\n * lg → popovers, dropdowns ancorados\n * xl → dropdowns grandes\n * 2xl → modais, dialogs\n * aside → drawer slide-in lateral (direção horizontal)\n *\n * Outros composites:\n * ring → focus de input/textarea/select (3px brand-tinted box-shadow)\n */\n\nimport { brand, brandContrast, gray, danger, success, warning, info } from \"../primitives/color-palette\";\n\n// ─── Shadow tokens ─────────────────────────────────────────────────────────────\n\nexport const shadow = {\n // ── Light mode ───────────────────────────────────────────────────────────────\n light: {\n none: \"none\",\n sm: \"0 1px 2px oklch(0 0 0 / 0.04)\",\n md: \"rgba(145, 158, 171, 0.18) 0 0 2px 0, rgba(145, 158, 171, 0.12) 0 12px 24px -4px\",\n lg: \"0 8px 24px oklch(0 0 0 / 0.08)\",\n xl: \"0 12px 32px oklch(0 0 0 / 0.08)\",\n \"2xl\": \"0 24px 56px oklch(0 0 0 / 0.16)\",\n aside: \"-8px 0 24px oklch(0 0 0 / 0.12)\",\n\n // Focus ring brand-tinted (composite — usado direto em box-shadow)\n ring: `0 0 0 3px color-mix(in oklch, ${brand[600]} 22%, transparent)`,\n \"ring-danger\": `0 0 0 3px color-mix(in oklch, ${danger[500]} 22%, transparent)`,\n \"ring-warning\": `0 0 0 3px color-mix(in oklch, ${warning[500]} 22%, transparent)`,\n \"ring-success\": `0 0 0 3px color-mix(in oklch, ${success[500]} 22%, transparent)`,\n \"ring-info\": `0 0 0 3px color-mix(in oklch, ${info[500]} 22%, transparent)`,\n },\n\n // ── Dark mode ────────────────────────────────────────────────────────────────\n dark: {\n none: \"none\",\n sm: \"none\",\n md: `0 0 0 1px ${gray[800]}`,\n lg: \"0 8px 24px oklch(0 0 0 / 0.30)\",\n xl: \"0 12px 32px oklch(0 0 0 / 0.40)\",\n \"2xl\": \"0 24px 56px oklch(0 0 0 / 0.45)\",\n aside: \"-8px 0 24px oklch(0 0 0 / 0.40)\",\n\n // Focus ring brand-contrast-tinted (dark usa brandContrast)\n ring: `0 0 0 3px color-mix(in oklch, ${brandContrast[400]} 22%, transparent)`,\n \"ring-danger\": `0 0 0 3px color-mix(in oklch, ${danger[500]} 22%, transparent)`,\n \"ring-warning\": `0 0 0 3px color-mix(in oklch, ${warning[500]} 22%, transparent)`,\n \"ring-success\": `0 0 0 3px color-mix(in oklch, ${success[500]} 22%, transparent)`,\n \"ring-info\": `0 0 0 3px color-mix(in oklch, ${info[500]} 22%, transparent)`,\n },\n} as const;\n\n// ─── Opacity ───────────────────────────────────────────────────────────────────\nexport const opacity = {\n // Estados interativos\n disabled: 0.38,\n hover: 0.08,\n focus: 0.12,\n pressed: 0.12,\n dragged: 0.16,\n\n // Visibilidade\n invisible: 0,\n muted: 0.5,\n subtle: 0.7,\n full: 1,\n\n // Overlay de background (scrims de modal)\n \"scrim-light\": 0.32,\n \"scrim-dark\": 0.64,\n} as const;\n\n// ─── Blur (backdrop-filter) ────────────────────────────────────────────────────\nexport const blur = {\n sm: \"blur(4px)\",\n md: \"blur(8px)\",\n lg: \"blur(16px)\",\n xl: \"blur(24px)\",\n} as const;\n\n// ─── Z-Index ──────────────────────────────────────────────────────────────────\nexport const zIndex = {\n hide: -1,\n base: 0,\n dropdown: 100,\n sticky: 200,\n overlay: 300,\n modal: 400,\n popover: 500,\n toast: 600,\n tooltip: 700,\n} as const;\n\nexport const elevation = { shadow, opacity, blur, zIndex } as const;\nexport type ElevationToken = typeof elevation;\n","/**\n * fonts.ts — Typographic scale\n * Tier 1 de 3: valores raw. API privada.\n *\n * Princípio: escala baseada em razão modular (1.25 — Major Third).\n *\n * BASE = 16px (1rem)\n * Razão = 1.25 (major third)\n *\n * Regra de line-height: proporcional ao font-size.\n * - Displays e headings: ratio 1.2 (tight)\n * - Body: ratio 1.5 (confortável para leitura)\n * - Captions/labels: ratio 1.33\n *\n * Uso: importar nos arquivos semantic (typography.ts).\n * Nunca usar valores raw diretamente em componentes.\n */\n\nconst BASE = 16; // px\nconst RATIO = 1.25; // major third\n\n/**\n * Calcula font-size na escala modular.\n * step > 0 = maior que base, step < 0 = menor que base\n */\nexport const typeSize = (step: number): string =>\n `${Math.round(BASE * Math.pow(RATIO, step))}px`;\n\n/**\n * Calcula line-height proporcional ao font-size.\n * tight = displays/headings, normal = body, loose = captions\n */\nexport const lh = (\n size: number,\n mode: \"tight\" | \"normal\" | \"loose\" = \"normal\"\n): string => {\n const ratio = { tight: 1.2, normal: 1.5, loose: 1.33 };\n return `${Math.round(size * ratio[mode])}px`;\n};\n\n/**\n * Font families (valores raw).\n * A decisão de qual fonte usa cada preset fica em typography.ts (semântico).\n */\nexport const fontFamily = {\n sans: \"var(--font-sans, 'Geist', system-ui, -apple-system, sans-serif)\",\n mono: \"var(--font-mono, 'Geist Mono', 'Fira Code', monospace)\",\n serif: \"var(--font-serif, Georgia, 'Times New Roman', serif)\",\n} as const;\n\n/**\n * Font weights.\n * Usando nomes semânticos, não números — portável entre fontes.\n */\nexport const fontWeight = {\n regular: \"400\",\n medium: \"500\",\n semibold: \"600\",\n bold: \"700\",\n} as const;\n\n/**\n * Letter-spacing por contexto.\n */\nexport const letterSpacing = {\n tighter: \"-0.02em\",\n tight: \"-0.01em\", // displays e headlines grandes\n normal: \"0em\", // body\n wide: \"0.01em\", // labels, botões\n wider: \"0.03em\",\n widest: \"0.05em\", // overlines, all-caps\n} as const;\n\n/** Escala com named keys — usada por typography.ts */\nexport const fontSize: Record<string, { size: string; lineHeight: string }> = {\n \"2xs\": { size: typeSize(-3), lineHeight: lh(Math.round(BASE * Math.pow(RATIO, -3)), \"loose\") },\n xs: { size: typeSize(-2), lineHeight: lh(Math.round(BASE * Math.pow(RATIO, -2)), \"normal\") },\n sm: { size: typeSize(-1), lineHeight: lh(Math.round(BASE * Math.pow(RATIO, -1)), \"normal\") },\n md: { size: typeSize(0), lineHeight: lh(BASE, \"normal\") },\n lg: { size: typeSize(1), lineHeight: lh(Math.round(BASE * RATIO), \"tight\") },\n xl: { size: typeSize(2), lineHeight: lh(Math.round(BASE * Math.pow(RATIO, 2)), \"tight\") },\n \"2xl\": { size: typeSize(3), lineHeight: lh(Math.round(BASE * Math.pow(RATIO, 3)), \"tight\") },\n \"3xl\": { size: typeSize(4), lineHeight: lh(Math.round(BASE * Math.pow(RATIO, 4)), \"tight\") },\n \"4xl\": { size: typeSize(5), lineHeight: lh(Math.round(BASE * Math.pow(RATIO, 5)), \"tight\") },\n \"5xl\": { size: typeSize(6), lineHeight: lh(Math.round(BASE * Math.pow(RATIO, 6)), \"tight\") },\n};\n","/**\r\n * typography.ts — Semantic typography tokens (composite)\r\n *\r\n * 6 roles: display | heading | title | body | caption | code\r\n * 23 presets totais\r\n *\r\n * REGRAS:\r\n * - Presets compostos: combinam fontSize + lineHeight + fontWeight + letterSpacing + fontFamily.\r\n * - Nomenclatura: {role}-{tier}\r\n * - Valores em rem (acessibilidade: respeita preferência de fonte do usuário).\r\n * - display/heading (≥ 32px desktop) usam clamp() para fluid typography.\r\n * - Presets menores usam rem estático (fluid não faz diferença abaixo de 32px).\r\n *\r\n * WEIGHT DEFAULT POR ROLE:\r\n * - display: varia por tier (semibold → bold)\r\n * - heading: 500 (medium) para fluid; 500 para heading-xs estático\r\n * - title: 600 (semibold) — mais usado no projeto\r\n * - body-xs/sm: 500 (medium) — interactive (button, dropdown, input, table cell)\r\n * - body-md/lg/xl/2xl: 400 (regular) — body corrido\r\n * - caption: 400 (regular)\r\n * - code: 400 (regular, mono)\r\n *\r\n * OVERRIDE CONVENCIONAL via Tailwind nativo:\r\n * - font-bold/semibold/medium/normal — peso diferente\r\n * - leading-X — line-height\r\n * - tracking-X — letter-spacing\r\n *\r\n * HIERARQUIA:\r\n * display → hero sections, marketing (muito grande, fluid)\r\n * heading → títulos de página, modais (grande, fluid a partir de sm)\r\n * title → títulos de card, seção (médio, estático, weight 600)\r\n * body → texto corrido + interactive (estático)\r\n * caption → texto auxiliar, metadados, microlabels (estático)\r\n * code → código inline e blocos (estático, mono)\r\n *\r\n * Migration log:\r\n * - 2026-05-19: rewrite enxuto. Removidos paragraph-*, label-*, subheading-* (32→23 presets).\r\n * Decimais e órfãos (10.5/11.5/12.5/13.5/14.5/15/17/22/26) já eliminados nas Ondas 1-4.\r\n */\r\n\r\nimport { fontWeight, fontFamily } from \"../primitives/fonts\";\r\n\r\n// Tipo base para um preset tipográfico\r\ninterface TypographyPreset {\r\n fontSize: string;\r\n lineHeight: string;\r\n fontWeight: string;\r\n letterSpacing: string;\r\n fontFamily: string;\r\n}\r\n\r\n// ─── Display (fluid — clamp) ─────────────────────────────────────────────────\r\n// Hero sections, landing pages. Viewport range: 375px → 1280px.\r\nexport const display: Record<string, TypographyPreset> = {\r\n \"display-2xl\": {\r\n fontSize: \"clamp(2.5rem, calc(1.568rem + 3.978vw), 4.75rem)\",\r\n lineHeight: \"1.1\",\r\n fontWeight: fontWeight.bold,\r\n letterSpacing: \"-0.02em\",\r\n fontFamily: fontFamily.sans,\r\n },\r\n \"display-xl\": {\r\n fontSize: \"clamp(2.25rem, calc(1.603rem + 2.762vw), 3.8125rem)\",\r\n lineHeight: \"1.1\",\r\n fontWeight: fontWeight.bold,\r\n letterSpacing: \"-0.02em\",\r\n fontFamily: fontFamily.sans,\r\n },\r\n \"display-lg\": {\r\n fontSize: \"clamp(2rem, calc(1.560rem + 1.878vw), 3.0625rem)\",\r\n lineHeight: \"1.15\",\r\n fontWeight: fontWeight.semibold,\r\n letterSpacing: \"-0.01em\",\r\n fontFamily: fontFamily.sans,\r\n },\r\n \"display-md\": {\r\n fontSize: \"clamp(1.75rem, calc(1.465rem + 1.215vw), 2.4375rem)\",\r\n lineHeight: \"1.15\",\r\n fontWeight: fontWeight.semibold,\r\n letterSpacing: \"-0.01em\",\r\n fontFamily: fontFamily.sans,\r\n },\r\n} as const;\r\n\r\n// ─── Heading (fluid sm→xl, estático xs) ───────────────────────────────────────\r\n// Títulos de página, modais, dialogs.\r\nexport const heading: Record<string, TypographyPreset> = {\r\n \"heading-xl\": {\r\n fontSize: \"clamp(2.25rem, calc(1.732rem + 2.210vw), 3.5rem)\",\r\n lineHeight: \"1.15\",\r\n fontWeight: fontWeight.medium,\r\n letterSpacing: \"-0.01em\",\r\n fontFamily: fontFamily.sans,\r\n },\r\n \"heading-lg\": {\r\n fontSize: \"clamp(2rem, calc(1.586rem + 1.768vw), 3rem)\",\r\n lineHeight: \"1.2\",\r\n fontWeight: fontWeight.medium,\r\n letterSpacing: \"-0.01em\",\r\n fontFamily: fontFamily.sans,\r\n },\r\n \"heading-md\": {\r\n fontSize: \"clamp(1.75rem, calc(1.439rem + 1.326vw), 2.5rem)\",\r\n lineHeight: \"1.2\",\r\n fontWeight: fontWeight.medium,\r\n letterSpacing: \"-0.01em\",\r\n fontFamily: fontFamily.sans,\r\n },\r\n \"heading-sm\": {\r\n fontSize: \"clamp(1.5rem, calc(1.293rem + 0.884vw), 2rem)\",\r\n lineHeight: \"1.25\",\r\n fontWeight: fontWeight.medium,\r\n letterSpacing: \"-0.005em\",\r\n fontFamily: fontFamily.sans,\r\n },\r\n \"heading-xs\": {\r\n fontSize: \"1.5rem\", // 24px\r\n lineHeight: \"2rem\", // 32px\r\n fontWeight: fontWeight.medium,\r\n letterSpacing: \"0em\",\r\n fontFamily: fontFamily.sans,\r\n },\r\n} as const;\r\n\r\n// ─── Title (estático — weight 600 default) ────────────────────────────────────\r\n// Títulos de card, seção, modal, panel. Weight 600 (semibold).\r\nexport const title: Record<string, TypographyPreset> = {\r\n \"title-lg\": {\r\n fontSize: \"1.25rem\", // 20px\r\n lineHeight: \"1.75rem\", // 28px\r\n fontWeight: fontWeight.semibold,\r\n letterSpacing: \"0em\",\r\n fontFamily: fontFamily.sans,\r\n },\r\n \"title-md\": {\r\n fontSize: \"1rem\", // 16px\r\n lineHeight: \"1.5rem\", // 24px\r\n fontWeight: fontWeight.semibold,\r\n letterSpacing: \"-0.011em\",\r\n fontFamily: fontFamily.sans,\r\n },\r\n \"title-sm\": {\r\n fontSize: \"0.875rem\", // 14px\r\n lineHeight: \"1.25rem\", // 20px\r\n fontWeight: fontWeight.semibold,\r\n letterSpacing: \"-0.006em\",\r\n fontFamily: fontFamily.sans,\r\n },\r\n} as const;\r\n\r\n// ─── Body (estático — interactive xs/sm = 500; corrido md/lg/xl/2xl = 400) ────\r\n// Texto corrido, body de leitura, labels interativos (button, dropdown, input).\r\nexport const body: Record<string, TypographyPreset> = {\r\n \"body-2xl\": {\r\n fontSize: \"1.5rem\", // 24px\r\n lineHeight: \"2rem\", // 32px\r\n fontWeight: fontWeight.regular,\r\n letterSpacing: \"-0.015em\",\r\n fontFamily: fontFamily.sans,\r\n },\r\n \"body-xl\": {\r\n fontSize: \"1.125rem\", // 18px\r\n lineHeight: \"1.5rem\", // 24px\r\n fontWeight: fontWeight.regular,\r\n letterSpacing: \"-0.015em\",\r\n fontFamily: fontFamily.sans,\r\n },\r\n \"body-lg\": {\r\n fontSize: \"1rem\", // 16px\r\n lineHeight: \"1.5rem\", // 24px\r\n fontWeight: fontWeight.regular,\r\n letterSpacing: \"-0.011em\",\r\n fontFamily: fontFamily.sans,\r\n },\r\n \"body-md\": {\r\n fontSize: \"0.875rem\", // 14px\r\n lineHeight: \"1.25rem\", // 20px\r\n fontWeight: fontWeight.regular,\r\n letterSpacing: \"-0.006em\",\r\n fontFamily: fontFamily.sans,\r\n },\r\n // body-sm — 13px — body default do projeto (button, dropdown, input, table cell)\r\n \"body-sm\": {\r\n fontSize: \"0.8125rem\", // 13px\r\n lineHeight: \"1.125rem\", // 18px\r\n fontWeight: fontWeight.medium,\r\n letterSpacing: \"-0.003em\",\r\n fontFamily: fontFamily.sans,\r\n },\r\n // body-xs — 12px — interactive small (chip, sub-item)\r\n \"body-xs\": {\r\n fontSize: \"0.75rem\", // 12px\r\n lineHeight: \"1rem\", // 16px\r\n fontWeight: fontWeight.medium,\r\n letterSpacing: \"0em\",\r\n fontFamily: fontFamily.sans,\r\n },\r\n} as const;\r\n\r\n// ─── Caption (estático — peso 400) ────────────────────────────────────────────\r\n// Texto auxiliar, timestamps, metadados, helpers, microlabels.\r\nexport const caption: Record<string, TypographyPreset> = {\r\n \"caption-md\": {\r\n fontSize: \"0.75rem\", // 12px\r\n lineHeight: \"1rem\", // 16px\r\n fontWeight: fontWeight.regular,\r\n letterSpacing: \"0em\",\r\n fontFamily: fontFamily.sans,\r\n },\r\n \"caption-sm\": {\r\n fontSize: \"0.6875rem\", // 11px\r\n lineHeight: \"0.875rem\", // 14px\r\n fontWeight: fontWeight.regular,\r\n letterSpacing: \"0em\",\r\n fontFamily: fontFamily.sans,\r\n },\r\n \"caption-xs\": {\r\n fontSize: \"0.625rem\", // 10px\r\n lineHeight: \"0.75rem\", // 12px\r\n fontWeight: fontWeight.regular,\r\n letterSpacing: \"0em\",\r\n fontFamily: fontFamily.sans,\r\n },\r\n} as const;\r\n\r\n// ─── Code (estático — mono regular) ──────────────────────────────────────────\r\nexport const code: Record<string, TypographyPreset> = {\r\n \"code-md\": {\r\n fontSize: \"1rem\", // 16px\r\n lineHeight: \"1.6\",\r\n fontWeight: fontWeight.regular,\r\n letterSpacing: \"0em\",\r\n fontFamily: fontFamily.mono,\r\n },\r\n \"code-sm\": {\r\n fontSize: \"0.8125rem\", // 13px\r\n lineHeight: \"1.6\",\r\n fontWeight: fontWeight.regular,\r\n letterSpacing: \"0em\",\r\n fontFamily: fontFamily.mono,\r\n },\r\n} as const;\r\n\r\n// ─── Export agrupado ──────────────────────────────────────────────────────────\r\nexport const typography = {\r\n ...display,\r\n ...heading,\r\n ...title,\r\n ...body,\r\n ...caption,\r\n ...code,\r\n} as const;\r\n\r\nexport type TypographyToken = typeof typography;\r\nexport type TypographyKey = keyof typeof typography;\r\n","/**\n * motion.ts — Motion primitive tokens\n * Tier 1 de 3: valores raw. API privada.\n *\n * Princípio: durações baseadas em complexidade da transição.\n * Easings: productive (precisão) vs expressive (fluidez).\n */\n\n/** Durações em ms */\nexport const duration = {\n instant: \"0ms\",\n \"x-fast\": \"100ms\", // hover states, focus rings\n fast: \"150ms\", // simples (opacity, color)\n moderate: \"200ms\", // entradas de elementos\n slow: \"300ms\", // modais, drawers, expansões\n \"x-slow\": \"400ms\", // page transitions\n deliberate: \"500ms\", // animações complexas, onboarding\n} as const;\n\n/**\n * Easing curves.\n * Productive: movimentos precisos (UI transacional).\n * Expressive: movimentos fluidos (marketing, onboarding).\n */\nexport const easing = {\n // Productive\n \"standard\": \"cubic-bezier(0.2, 0, 0.38, 0.9)\", // entra e sai\n \"entrance-productive\": \"cubic-bezier(0, 0, 0.38, 0.9)\", // entra\n \"exit-productive\": \"cubic-bezier(0.2, 0, 1, 0.9)\", // sai\n\n // Expressive\n \"emphasized\": \"cubic-bezier(0.2, 0, 0, 1)\", // enfatizado\n \"emphasized-decelerate\": \"cubic-bezier(0.05, 0.7, 0.1, 1)\",// entra (expressive)\n \"emphasized-accelerate\": \"cubic-bezier(0.3, 0, 0.8, 0.15)\",// sai (expressive)\n\n // Utilitários\n \"linear\": \"linear\",\n \"spring\": \"cubic-bezier(0.175, 0.885, 0.32, 1.275)\", // ligeiro bounce\n} as const;\n\n/** Tokens compostos: duração + easing para padrões comuns */\nexport const motionPresets = {\n // Component transitions (button, badge, input, switch)\n \"component\": `${duration.moderate} ease-out`,\n // Color shift (tabs item color)\n \"color-shift\": `${duration.slow} ease-out`,\n // Spring (tabs indicator slide)\n \"spring\": `${duration.slow} cubic-bezier(0.65, 0, 0.35, 1)`,\n // Existing presets\n \"hover-color\": `${duration.fast} ${easing.standard}`,\n \"hover-transform\": `${duration[\"x-fast\"]} ${easing[\"entrance-productive\"]}`,\n \"fade-in\": `${duration.moderate} ${easing[\"emphasized-decelerate\"]}`,\n \"fade-out\": `${duration.fast} ${easing[\"emphasized-accelerate\"]}`,\n \"slide-in\": `${duration.slow} ${easing[\"emphasized-decelerate\"]}`,\n \"slide-out\": `${duration.moderate} ${easing[\"emphasized-accelerate\"]}`,\n \"expand\": `${duration.slow} ${easing.emphasized}`,\n \"collapse\": `${duration.moderate} ${easing[\"emphasized-accelerate\"]}`,\n} as const;\n"],"names":["bg","fg","border","ring","overlay"],"mappings":"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"}
|