@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.
Files changed (73) hide show
  1. package/README.md +34 -1
  2. package/dist-lib/chunks/{app-shell-BNTvOETJ.mjs → app-shell-BdVam01i.cjs} +55 -55
  3. package/dist-lib/chunks/app-shell-BdVam01i.cjs.map +1 -0
  4. package/dist-lib/chunks/{app-shell-CDy42aNI.mjs → app-shell-C_enrPD8.mjs} +86 -86
  5. package/dist-lib/chunks/app-shell-C_enrPD8.mjs.map +1 -0
  6. package/dist-lib/chunks/{app-shell-mocks-oO_IV3Gw.mjs → app-shell-mocks-oO_IV3Gw.cjs} +1 -1
  7. package/dist-lib/chunks/{app-shell-mocks-oO_IV3Gw.mjs.map → app-shell-mocks-oO_IV3Gw.cjs.map} +1 -1
  8. package/dist-lib/chunks/{badge-B_2Zt52o.mjs → badge-B0D_PRxn.mjs} +10 -10
  9. package/dist-lib/chunks/badge-B0D_PRxn.mjs.map +1 -0
  10. package/dist-lib/chunks/{badge-DKpXURa1.mjs → badge-CUttkO1X.cjs} +10 -10
  11. package/dist-lib/chunks/badge-CUttkO1X.cjs.map +1 -0
  12. package/dist-lib/chunks/{chat-v2-mocks-BV9Wha_Z.mjs → chat-v2-mocks-BV9Wha_Z.cjs} +1 -1
  13. package/dist-lib/chunks/{chat-v2-mocks-BV9Wha_Z.mjs.map → chat-v2-mocks-BV9Wha_Z.cjs.map} +1 -1
  14. package/dist-lib/chunks/{chip-group-CsKBBHW2.mjs → chip-group-2-f_Yo7Y.cjs} +31 -64
  15. package/dist-lib/chunks/chip-group-2-f_Yo7Y.cjs.map +1 -0
  16. package/dist-lib/chunks/{chip-group-D3D0i72q.mjs → chip-group-_e-yh1Zq.mjs} +31 -64
  17. package/dist-lib/chunks/chip-group-_e-yh1Zq.mjs.map +1 -0
  18. package/dist-lib/chunks/{clientes-showcase-mocks-BMfbNNJh.mjs → clientes-showcase-mocks-CPNOhx1G.cjs} +3 -3
  19. package/dist-lib/chunks/clientes-showcase-mocks-CPNOhx1G.cjs.map +1 -0
  20. package/dist-lib/chunks/{clientes-showcase-mocks-Cq9u3nGZ.mjs → clientes-showcase-mocks-DEHCKxMK.mjs} +3 -3
  21. package/dist-lib/chunks/clientes-showcase-mocks-DEHCKxMK.mjs.map +1 -0
  22. package/dist-lib/chunks/{input-374MpdBL.mjs → input-BWevV7up.cjs} +3 -3
  23. package/dist-lib/chunks/input-BWevV7up.cjs.map +1 -0
  24. package/dist-lib/chunks/{input-DF4XAWmr.mjs → input-C9eKSSEb.mjs} +3 -3
  25. package/dist-lib/chunks/input-C9eKSSEb.mjs.map +1 -0
  26. package/dist-lib/chunks/{page-header-mC1gGtOI.mjs → page-header-DM2G1mdi.mjs} +3 -3
  27. package/dist-lib/chunks/page-header-DM2G1mdi.mjs.map +1 -0
  28. package/dist-lib/chunks/{page-header-Dw-3wqAG.mjs → page-header-qOywgRWy.cjs} +3 -3
  29. package/dist-lib/chunks/page-header-qOywgRWy.cjs.map +1 -0
  30. package/dist-lib/chunks/{panel-bzNmFlEZ.mjs → panel-CjfnpA-4.cjs} +532 -244
  31. package/dist-lib/chunks/panel-CjfnpA-4.cjs.map +1 -0
  32. package/dist-lib/chunks/{panel-Ds15whqp.mjs → panel-DZ7X1NZV.mjs} +547 -259
  33. package/dist-lib/chunks/panel-DZ7X1NZV.mjs.map +1 -0
  34. package/dist-lib/chunks/{useTheme-Dee4mo-A.mjs → useTheme-Dee4mo-A.cjs} +1 -1
  35. package/dist-lib/chunks/{useTheme-Dee4mo-A.mjs.map → useTheme-Dee4mo-A.cjs.map} +1 -1
  36. package/dist-lib/index.cjs +23 -76
  37. package/dist-lib/index.cjs.map +1 -1
  38. package/dist-lib/index.mjs +89 -142
  39. package/dist-lib/index.mjs.map +1 -1
  40. package/dist-lib/preview/chat.cjs +38 -39
  41. package/dist-lib/preview/chat.cjs.map +1 -1
  42. package/dist-lib/preview/chat.mjs +35 -36
  43. package/dist-lib/preview/chat.mjs.map +1 -1
  44. package/dist-lib/preview/clientes.cjs +22 -22
  45. package/dist-lib/preview/clientes.cjs.map +1 -1
  46. package/dist-lib/preview/clientes.mjs +20 -20
  47. package/dist-lib/preview/clientes.mjs.map +1 -1
  48. package/dist-lib/preview/dashboard.cjs +40 -40
  49. package/dist-lib/preview/dashboard.cjs.map +1 -1
  50. package/dist-lib/preview/dashboard.mjs +38 -38
  51. package/dist-lib/preview/dashboard.mjs.map +1 -1
  52. package/dist-lib/preview/mocks.cjs +3 -3
  53. package/dist-lib/preview/mocks.mjs +1 -1
  54. package/dist-lib/theme.css +18 -122
  55. package/dist-lib/tokens.cjs +24 -160
  56. package/dist-lib/tokens.cjs.map +1 -1
  57. package/dist-lib/tokens.mjs +24 -160
  58. package/dist-lib/tokens.mjs.map +1 -1
  59. package/package.json +142 -142
  60. package/dist-lib/chunks/app-shell-BNTvOETJ.mjs.map +0 -1
  61. package/dist-lib/chunks/app-shell-CDy42aNI.mjs.map +0 -1
  62. package/dist-lib/chunks/badge-B_2Zt52o.mjs.map +0 -1
  63. package/dist-lib/chunks/badge-DKpXURa1.mjs.map +0 -1
  64. package/dist-lib/chunks/chip-group-CsKBBHW2.mjs.map +0 -1
  65. package/dist-lib/chunks/chip-group-D3D0i72q.mjs.map +0 -1
  66. package/dist-lib/chunks/clientes-showcase-mocks-BMfbNNJh.mjs.map +0 -1
  67. package/dist-lib/chunks/clientes-showcase-mocks-Cq9u3nGZ.mjs.map +0 -1
  68. package/dist-lib/chunks/input-374MpdBL.mjs.map +0 -1
  69. package/dist-lib/chunks/input-DF4XAWmr.mjs.map +0 -1
  70. package/dist-lib/chunks/page-header-Dw-3wqAG.mjs.map +0 -1
  71. package/dist-lib/chunks/page-header-mC1gGtOI.mjs.map +0 -1
  72. package/dist-lib/chunks/panel-Ds15whqp.mjs.map +0 -1
  73. package/dist-lib/chunks/panel-bzNmFlEZ.mjs.map +0 -1
@@ -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.medium,
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.medium,
591
- letterSpacing: "0em",
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.medium,
600
- letterSpacing: "0em",
597
+ fontWeight: fontWeight.semibold,
598
+ letterSpacing: "-0.006em",
601
599
  fontFamily: fontFamily.sans
602
600
  }
603
601
  };
604
- const label = {
605
- "label-xl": {
602
+ const body = {
603
+ "body-2xl": {
606
604
  fontSize: "1.5rem",
607
605
  // 24px
608
606
  lineHeight: "2rem",
609
607
  // 32px
610
- fontWeight: fontWeight.medium,
608
+ fontWeight: fontWeight.regular,
611
609
  letterSpacing: "-0.015em",
612
610
  fontFamily: fontFamily.sans
613
611
  },
614
- "label-lg": {
612
+ "body-xl": {
615
613
  fontSize: "1.125rem",
616
614
  // 18px
617
615
  lineHeight: "1.5rem",
618
616
  // 24px
619
- fontWeight: fontWeight.medium,
617
+ fontWeight: fontWeight.regular,
620
618
  letterSpacing: "-0.015em",
621
619
  fontFamily: fontFamily.sans
622
620
  },
623
- "label-md": {
621
+ "body-lg": {
624
622
  fontSize: "1rem",
625
623
  // 16px
626
624
  lineHeight: "1.5rem",
627
625
  // 24px
628
- fontWeight: fontWeight.medium,
626
+ fontWeight: fontWeight.regular,
629
627
  letterSpacing: "-0.011em",
630
628
  fontFamily: fontFamily.sans
631
629
  },
632
- "label-sm": {
630
+ "body-md": {
633
631
  fontSize: "0.875rem",
634
632
  // 14px
635
633
  lineHeight: "1.25rem",
636
634
  // 20px
637
- fontWeight: fontWeight.medium,
635
+ fontWeight: fontWeight.regular,
638
636
  letterSpacing: "-0.006em",
639
637
  fontFamily: fontFamily.sans
640
638
  },
641
- "label-xs": {
642
- fontSize: "0.75rem",
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
- "paragraph-xs": {
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.regular,
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.8125rem",
734
- // 13px
735
- lineHeight: "1.125rem",
736
- // 18px
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
- ...label,
846
- ...paragraph,
711
+ ...body,
847
712
  ...caption,
848
- ...subheading,
849
713
  ...code
850
714
  };
851
715
  const duration = {
@@ -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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"}