@sbkbs/ui 1.0.6 → 2.0.0-beta.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 (210) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/MIGRATION.md +96 -0
  3. package/README.md +221 -115
  4. package/dist/assets/favicon/apple-touch-icon.png +0 -0
  5. package/dist/assets/favicon/favicon-96x96.png +0 -0
  6. package/dist/assets/favicon/favicon.ico +0 -0
  7. package/dist/assets/favicon/favicon.svg +1 -0
  8. package/dist/assets/favicon/site.webmanifest +21 -0
  9. package/dist/assets/favicon/web-app-manifest-192x192.png +0 -0
  10. package/dist/assets/favicon/web-app-manifest-512x512.png +0 -0
  11. package/dist/base.css +38 -0
  12. package/dist/components/Accordion/Accordion.d.ts +13 -1
  13. package/dist/components/Accordion/Accordion.js +100 -52
  14. package/dist/components/Accordion/Accordion.js.map +1 -1
  15. package/dist/components/Alert/Alert.d.ts +17 -4
  16. package/dist/components/Alert/Alert.js +64 -20
  17. package/dist/components/Alert/Alert.js.map +1 -1
  18. package/dist/components/Avatar/Avatar.d.ts +12 -6
  19. package/dist/components/Avatar/Avatar.js +66 -0
  20. package/dist/components/Avatar/Avatar.js.map +1 -0
  21. package/dist/components/Badge/Badge.d.ts +11 -2
  22. package/dist/components/Badge/Badge.js +42 -30
  23. package/dist/components/Badge/Badge.js.map +1 -1
  24. package/dist/components/Breadcrumb/Breadcrumb.d.ts +5 -2
  25. package/dist/components/Breadcrumb/Breadcrumb.js +23 -16
  26. package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -1
  27. package/dist/components/Button/Button.d.ts +10 -8
  28. package/dist/components/Button/Button.js +73 -114
  29. package/dist/components/Button/Button.js.map +1 -1
  30. package/dist/components/Card/Card.d.ts +33 -3
  31. package/dist/components/Card/Card.js +91 -30
  32. package/dist/components/Card/Card.js.map +1 -1
  33. package/dist/components/Checkbox/Checkbox.d.ts +4 -1
  34. package/dist/components/Checkbox/Checkbox.js +32 -31
  35. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  36. package/dist/components/Chip/Chip.d.ts +7 -1
  37. package/dist/components/Chip/Chip.js +19 -9
  38. package/dist/components/Chip/Chip.js.map +1 -1
  39. package/dist/components/Combobox/Combobox.d.ts +10 -2
  40. package/dist/components/Combobox/Combobox.js +146 -133
  41. package/dist/components/Combobox/Combobox.js.map +1 -1
  42. package/dist/components/Divider/Divider.d.ts +7 -1
  43. package/dist/components/Divider/Divider.js +28 -12
  44. package/dist/components/Divider/Divider.js.map +1 -1
  45. package/dist/components/DropdownMenu/DropdownMenu.d.ts +33 -0
  46. package/dist/components/DropdownMenu/DropdownMenu.js +147 -0
  47. package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -0
  48. package/dist/components/EmptyState/EmptyState.d.ts +7 -1
  49. package/dist/components/EmptyState/EmptyState.js +28 -19
  50. package/dist/components/EmptyState/EmptyState.js.map +1 -1
  51. package/dist/components/Field/Field.d.ts +21 -0
  52. package/dist/components/Field/Field.js +35 -0
  53. package/dist/components/Field/Field.js.map +1 -0
  54. package/dist/components/FileUpload/FileUpload.d.ts +9 -2
  55. package/dist/components/FileUpload/FileUpload.js +128 -102
  56. package/dist/components/FileUpload/FileUpload.js.map +1 -1
  57. package/dist/components/Footer/Footer.d.ts +19 -6
  58. package/dist/components/Footer/Footer.js +47 -115
  59. package/dist/components/Footer/Footer.js.map +1 -1
  60. package/dist/components/GlassPanel/GlassPanel.d.ts +18 -0
  61. package/dist/components/GlassPanel/GlassPanel.js +39 -0
  62. package/dist/components/GlassPanel/GlassPanel.js.map +1 -0
  63. package/dist/components/Header/Header.d.ts +25 -14
  64. package/dist/components/Header/Header.js +88 -148
  65. package/dist/components/Header/Header.js.map +1 -1
  66. package/dist/components/Highlight/Highlight.d.ts +13 -0
  67. package/dist/components/Highlight/Highlight.js +18 -0
  68. package/dist/components/Highlight/Highlight.js.map +1 -0
  69. package/dist/components/Icon/Icon.d.ts +21 -0
  70. package/dist/components/Icon/Icon.js +31 -0
  71. package/dist/components/Icon/Icon.js.map +1 -0
  72. package/dist/components/IconButton/IconButton.d.ts +12 -0
  73. package/dist/components/IconButton/IconButton.js +49 -0
  74. package/dist/components/IconButton/IconButton.js.map +1 -0
  75. package/dist/components/Input/Input.d.ts +3 -2
  76. package/dist/components/Input/Input.js +51 -69
  77. package/dist/components/Input/Input.js.map +1 -1
  78. package/dist/components/Layout/Layout.d.ts +2 -0
  79. package/dist/components/Layout/Layout.js +24 -18
  80. package/dist/components/Layout/Layout.js.map +1 -1
  81. package/dist/components/Logo/Logo.d.ts +27 -0
  82. package/dist/components/Logo/Logo.js +107 -0
  83. package/dist/components/Logo/Logo.js.map +1 -0
  84. package/dist/components/MiniCard/MiniCard.d.ts +21 -0
  85. package/dist/components/MiniCard/MiniCard.js +90 -0
  86. package/dist/components/MiniCard/MiniCard.js.map +1 -0
  87. package/dist/components/Modal/Modal.d.ts +16 -3
  88. package/dist/components/Modal/Modal.js +124 -93
  89. package/dist/components/Modal/Modal.js.map +1 -1
  90. package/dist/components/Navigation/Navigation.d.ts +1 -0
  91. package/dist/components/Navigation/Navigation.js +14 -14
  92. package/dist/components/Navigation/Navigation.js.map +1 -1
  93. package/dist/components/NumberInput/NumberInput.d.ts +5 -2
  94. package/dist/components/NumberInput/NumberInput.js +98 -128
  95. package/dist/components/NumberInput/NumberInput.js.map +1 -1
  96. package/dist/components/PageHeader/PageHeader.d.ts +8 -1
  97. package/dist/components/PageHeader/PageHeader.js +26 -25
  98. package/dist/components/PageHeader/PageHeader.js.map +1 -1
  99. package/dist/components/Pagination/Pagination.d.ts +15 -2
  100. package/dist/components/Pagination/Pagination.js +68 -34
  101. package/dist/components/Pagination/Pagination.js.map +1 -1
  102. package/dist/components/Paragraph/Paragraph.d.ts +8 -2
  103. package/dist/components/Paragraph/Paragraph.js +39 -36
  104. package/dist/components/Paragraph/Paragraph.js.map +1 -1
  105. package/dist/components/Popover/Popover.d.ts +12 -1
  106. package/dist/components/Popover/Popover.js +49 -37
  107. package/dist/components/Popover/Popover.js.map +1 -1
  108. package/dist/components/ProgressBar/ProgressBar.d.ts +12 -6
  109. package/dist/components/ProgressBar/ProgressBar.js +71 -0
  110. package/dist/components/ProgressBar/ProgressBar.js.map +1 -0
  111. package/dist/components/Radio/Radio.d.ts +2 -1
  112. package/dist/components/Radio/Radio.js +27 -31
  113. package/dist/components/Radio/Radio.js.map +1 -1
  114. package/dist/components/SectionHeader/SectionHeader.d.ts +6 -1
  115. package/dist/components/SectionHeader/SectionHeader.js +14 -12
  116. package/dist/components/SectionHeader/SectionHeader.js.map +1 -1
  117. package/dist/components/Select/Select.d.ts +6 -2
  118. package/dist/components/Select/Select.js +47 -35
  119. package/dist/components/Select/Select.js.map +1 -1
  120. package/dist/components/SideNav/SideNav.d.ts +55 -0
  121. package/dist/components/SideNav/SideNav.js +141 -0
  122. package/dist/components/SideNav/SideNav.js.map +1 -0
  123. package/dist/components/Skeleton/Skeleton.d.ts +12 -1
  124. package/dist/components/Skeleton/Skeleton.js +33 -18
  125. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  126. package/dist/components/Spinner/Spinner.d.ts +11 -3
  127. package/dist/components/Spinner/Spinner.js +57 -0
  128. package/dist/components/Spinner/Spinner.js.map +1 -0
  129. package/dist/components/Stepper/Stepper.d.ts +1 -1
  130. package/dist/components/Stepper/Stepper.js +41 -53
  131. package/dist/components/Stepper/Stepper.js.map +1 -1
  132. package/dist/components/Subtitle/Subtitle.d.ts +9 -3
  133. package/dist/components/Subtitle/Subtitle.js +29 -35
  134. package/dist/components/Subtitle/Subtitle.js.map +1 -1
  135. package/dist/components/Switch/Switch.d.ts +2 -1
  136. package/dist/components/Switch/Switch.js +45 -33
  137. package/dist/components/Switch/Switch.js.map +1 -1
  138. package/dist/components/Table/Table.d.ts +19 -1
  139. package/dist/components/Table/Table.js +48 -11
  140. package/dist/components/Table/Table.js.map +1 -1
  141. package/dist/components/Tabs/Tabs.d.ts +16 -2
  142. package/dist/components/Tabs/Tabs.js +80 -44
  143. package/dist/components/Tabs/Tabs.js.map +1 -1
  144. package/dist/components/Tag/Tag.d.ts +8 -1
  145. package/dist/components/Tag/Tag.js +27 -12
  146. package/dist/components/Tag/Tag.js.map +1 -1
  147. package/dist/components/Textarea/Textarea.d.ts +3 -1
  148. package/dist/components/Textarea/Textarea.js +36 -40
  149. package/dist/components/Textarea/Textarea.js.map +1 -1
  150. package/dist/components/Title/Title.d.ts +9 -3
  151. package/dist/components/Title/Title.js +42 -42
  152. package/dist/components/Title/Title.js.map +1 -1
  153. package/dist/components/Toast/Toast.d.ts +39 -11
  154. package/dist/components/Toast/Toast.js +130 -76
  155. package/dist/components/Toast/Toast.js.map +1 -1
  156. package/dist/components/Tooltip/Tooltip.d.ts +12 -2
  157. package/dist/components/Tooltip/Tooltip.js +50 -32
  158. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  159. package/dist/components/Typography/weight.d.ts +9 -0
  160. package/dist/components/Typography/weight.js +5 -0
  161. package/dist/components/Typography/weight.js.map +1 -0
  162. package/dist/fonts.css +8 -0
  163. package/dist/index.cjs +2 -0
  164. package/dist/index.cjs.map +1 -0
  165. package/dist/index.d.ts +55 -43
  166. package/dist/index.js +118 -83
  167. package/dist/index.js.map +1 -1
  168. package/dist/reset.css +9 -0
  169. package/dist/styles.css +1 -0
  170. package/dist/tailwind.css +153 -0
  171. package/dist/theme/ThemeProvider.d.ts +21 -3
  172. package/dist/theme/ThemeProvider.js +57 -18
  173. package/dist/theme/ThemeProvider.js.map +1 -1
  174. package/dist/theme/tokens.d.ts +43 -0
  175. package/dist/theme/tokens.js +39 -0
  176. package/dist/theme/tokens.js.map +1 -0
  177. package/dist/theme.css +296 -263
  178. package/dist/tokens.css +327 -0
  179. package/dist/utils/cn.d.ts +2 -2
  180. package/dist/utils/cn.js +19 -4
  181. package/dist/utils/cn.js.map +1 -1
  182. package/dist/utils/styles.d.ts +37 -0
  183. package/dist/utils/styles.js +35 -0
  184. package/dist/utils/styles.js.map +1 -0
  185. package/package.json +140 -117
  186. package/dist/components/Accordion/Accordion.stories.d.ts +0 -7
  187. package/dist/components/Alert/Alert.stories.d.ts +0 -8
  188. package/dist/components/Badge/Badge.stories.d.ts +0 -8
  189. package/dist/components/Breadcrumb/Breadcrumb.stories.d.ts +0 -8
  190. package/dist/components/Button/Button.stories.d.ts +0 -7
  191. package/dist/components/Card/Card.stories.d.ts +0 -8
  192. package/dist/components/Checkbox/Checkbox.stories.d.ts +0 -7
  193. package/dist/components/Combobox/Combobox.stories.d.ts +0 -9
  194. package/dist/components/Feedback/Feedback.stories.d.ts +0 -5
  195. package/dist/components/FileUpload/FileUpload.stories.d.ts +0 -10
  196. package/dist/components/Input/Input.stories.d.ts +0 -9
  197. package/dist/components/Modal/Modal.stories.d.ts +0 -8
  198. package/dist/components/NumberInput/NumberInput.stories.d.ts +0 -8
  199. package/dist/components/Pagination/Pagination.stories.d.ts +0 -8
  200. package/dist/components/Radio/Radio.stories.d.ts +0 -7
  201. package/dist/components/Select/Select.stories.d.ts +0 -8
  202. package/dist/components/Stepper/Stepper.stories.d.ts +0 -8
  203. package/dist/components/Switch/Switch.stories.d.ts +0 -8
  204. package/dist/components/Tabs/Tabs.stories.d.ts +0 -8
  205. package/dist/components/Textarea/Textarea.stories.d.ts +0 -7
  206. package/dist/components/Toast/Toast.stories.d.ts +0 -8
  207. package/dist/oficios-ui.css +0 -1
  208. package/dist/oficios-ui.umd.cjs +0 -2
  209. package/dist/oficios-ui.umd.cjs.map +0 -1
  210. package/dist/sbk-icon.png +0 -0
package/dist/theme.css CHANGED
@@ -1,294 +1,327 @@
1
1
  /* ============================================================
2
- DESIGN SYSTEM - VARIÁVEIS GLOBAIS DE TEMA (@oficios/ui)
3
- Guia de marca: cores e tipografia SBK
4
- ============================================================ */
2
+ @sbkbs/ui · Design tokens (Brand Book SBK 2026)
3
+ Fonte de verdade: docs/SBK_BRAND_GUIDE.md
5
4
 
6
- @import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,400;1,500&display=swap');
7
- @import url('https://fonts.googleapis.com/css2?family=Sora:wght@400;500;600;700;800&display=swap');
5
+ Camadas:
6
+ 1. Paleta oficial --sbk-<nome> (valores literais do brand book)
7
+ 2. Semânticos --sbk-color-<uso> (o que os componentes consomem)
8
+ 3. Escalas --sbk-radius-*, --sbk-shadow-*, --sbk-font-*, --sbk-duration-*
9
+ 4. Aliases legados --md-*, --brand-*, --bg-*, --text-* (deprecados, removidos na 3.0)
8
10
 
9
- /* ============================================================
10
- GUIA DE MARCA - CORES (paleta fixa para referência e paletas)
11
+ Temas:
12
+ - Padrão: SBK IA (produto digital)
13
+ - [data-brand='sbk']: SBK institucional (marca-mãe)
14
+ - [data-theme='dark']: modo escuro (proposta, a validar com marca)
11
15
  ============================================================ */
16
+
17
+ /* ---------- 1. Paleta oficial ---------- */
12
18
  :root {
13
- /* Cores principais do guia */
14
- --brand-verde-vibrante: #01b2aa;
15
- --brand-verde-profundo: #1f3a3a;
16
- --brand-grafite-azulado: #0f2f3a;
17
- --brand-azul-acinzentado: #5f7b8d;
18
- --brand-cinza-medio: #4b4b4b;
19
- --brand-cinza-escuro: #24262d;
20
- --brand-off-white: #eef0f4; /* Off-White Gelo — cor de fundo oficial SBK */
21
- --brand-off-white-gelo: #eef0f4; /* alias explícito */
22
- --brand-neutral-75: rgba(238, 240, 244, 0.75);
23
- --brand-branco: #ffffff;
24
-
25
- --brand-verde-medio: #2a7a6f; /* tom intermediário turquesa→verde escuro */
26
-
27
- /* DNA da marca - O Criador */
28
- --brand-preto: #000000;
29
- --brand-cinza: #989495;
30
- --brand-azul-lavanda: #777dac;
31
- --brand-azul-intenso: #132c3b;
32
- --brand-cinza-azulado: #b4c2c7;
33
- --brand-verde-lima: #cffe40;
34
- --brand-off-white-criador: #e4e4e4;
35
- --brand-azul-escuro: #071a5c;
19
+ /* Primária */
20
+ --sbk-verde-escuro: #023631;
21
+ --sbk-ciano-escuro: #075056;
22
+ --sbk-off-white: #eceff3;
23
+
24
+ /* Secundária */
25
+ --sbk-verde-claro: #0a5a52;
26
+ --sbk-verde-profundo: #012824;
27
+ --sbk-ciano: #2a7c79;
28
+ --sbk-ciano-profundo: #0e4442;
29
+ --sbk-chumbo-leve: #4a545e;
30
+ --sbk-preto: #000000;
31
+ --sbk-branco: #ffffff;
32
+
33
+ /* Estados: fora do brand book, PROPOSTA pendente de aprovação da marca.
34
+ Tons sóbrios, todos com contraste AA (>= 4.5:1) sobre branco. */
35
+ --sbk-estado-sucesso: #1d6b43;
36
+ --sbk-estado-alerta: #b45309;
37
+ --sbk-estado-erro: #b42318;
38
+ --sbk-estado-info: var(--sbk-ciano-escuro);
36
39
  }
37
40
 
38
- /* ============================================================
39
- GUIA DE MARCA - TIPOGRAFIA (O Herói / O Criador)
40
- Jakarta = headlines fortes; alta legibilidade; estrutura
41
- ============================================================ */
41
+ /* ---------- 2 e 3. Semânticos e escalas (tema SBK IA, claro) ---------- */
42
42
  :root {
43
- --font-primary: 'Plus Jakarta Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
44
- --font-secondary: 'Plus Jakarta Sans', var(--font-primary);
45
- --font-heading: var(--font-primary);
46
- --font-body: var(--font-primary);
47
- --font-logo: 'Sora', var(--font-primary); /* logo e títulos de marca */
43
+ /* Fundos e superfícies */
44
+ --sbk-color-bg: var(--sbk-off-white);
45
+ --sbk-color-surface: var(--sbk-branco);
46
+ --sbk-color-surface-sunken: var(--sbk-off-white);
47
+ --sbk-color-surface-hover: color-mix(in srgb, var(--sbk-verde-escuro) 5%, var(--sbk-branco));
48
+ --sbk-color-surface-inverse: var(--sbk-verde-escuro);
49
+ --sbk-color-overlay: color-mix(in srgb, var(--sbk-verde-profundo) 60%, transparent);
50
+
51
+ /* Texto */
52
+ --sbk-color-fg: var(--sbk-preto);
53
+ --sbk-color-fg-heading: var(--sbk-verde-escuro);
54
+ --sbk-color-fg-muted: var(--sbk-chumbo-leve);
55
+ --sbk-color-fg-inverse: var(--sbk-branco);
56
+
57
+ /* Linhas: derivadas da paleta. line-strong tem >= 3:1 sobre branco (WCAG 1.4.11) */
58
+ --sbk-color-line: color-mix(in srgb, var(--sbk-chumbo-leve) 22%, var(--sbk-branco));
59
+ --sbk-color-line-strong: color-mix(in srgb, var(--sbk-chumbo-leve) 65%, var(--sbk-branco));
60
+
61
+ /* Marca */
62
+ --sbk-color-primary: var(--sbk-verde-claro);
63
+ --sbk-color-primary-hover: var(--sbk-verde-escuro);
64
+ --sbk-color-on-primary: var(--sbk-branco);
65
+ --sbk-color-primary-subtle: color-mix(in srgb, var(--sbk-verde-claro) 10%, var(--sbk-branco));
66
+ --sbk-color-secondary: var(--sbk-ciano-escuro);
67
+ --sbk-color-secondary-hover: var(--sbk-ciano-profundo);
68
+ --sbk-color-on-secondary: var(--sbk-branco);
69
+ --sbk-color-accent: var(--sbk-ciano);
70
+ --sbk-color-highlight-bg: var(--sbk-ciano-escuro);
71
+ --sbk-color-highlight-fg: var(--sbk-branco);
72
+ --sbk-color-focus: var(--sbk-ciano);
73
+
74
+ /* Estados */
75
+ --sbk-color-success: var(--sbk-estado-sucesso);
76
+ --sbk-color-success-subtle: color-mix(in srgb, var(--sbk-estado-sucesso) 10%, var(--sbk-branco));
77
+ --sbk-color-warning: var(--sbk-estado-alerta);
78
+ --sbk-color-warning-subtle: color-mix(in srgb, var(--sbk-estado-alerta) 10%, var(--sbk-branco));
79
+ --sbk-color-error: var(--sbk-estado-erro);
80
+ --sbk-color-error-subtle: color-mix(in srgb, var(--sbk-estado-erro) 10%, var(--sbk-branco));
81
+ --sbk-color-info: var(--sbk-estado-info);
82
+ --sbk-color-info-subtle: color-mix(in srgb, var(--sbk-estado-info) 10%, var(--sbk-branco));
83
+ --sbk-color-on-state: var(--sbk-branco);
84
+ /* Cores de estado para TEXTO e ícones (no escuro ficam mais claras para manter contraste) */
85
+ --sbk-color-success-fg: var(--sbk-estado-sucesso);
86
+ --sbk-color-warning-fg: var(--sbk-estado-alerta);
87
+ --sbk-color-error-fg: var(--sbk-estado-erro);
88
+ --sbk-color-info-fg: var(--sbk-estado-info);
89
+
90
+ /* Tipografia: somente dois pesos (brand book) */
91
+ --sbk-font-family: 'Plus Jakarta Sans', Calibri, system-ui, sans-serif;
92
+ --sbk-font-weight-heading: 600; /* Seminegrito */
93
+ --sbk-font-weight-body: 300; /* Leve */
94
+
95
+ /* Raio: brand book define 8 a 16 para cards e blocos.
96
+ xs (4px) existe apenas para controles de 16px, como checkbox. */
97
+ --sbk-radius-xs: 0.25rem;
98
+ --sbk-radius-sm: 0.5rem;
99
+ --sbk-radius-md: 0.75rem;
100
+ --sbk-radius-lg: 1rem;
101
+
102
+ /* Sombras leves, tingidas de verde escuro (sem sombras pesadas) */
103
+ --sbk-shadow-sm: 0 0.0625rem 0.125rem rgb(2 54 49 / 0.06), 0 0.5rem 1.5rem rgb(2 54 49 / 0.05);
104
+ --sbk-shadow-md: 0 0.25rem 0.5rem rgb(2 54 49 / 0.06), 0 0.75rem 2rem rgb(2 54 49 / 0.1);
105
+
106
+ /* Opacidade de cards sobrepostos (brand book: 60% a 90%) */
107
+ --sbk-card-layer-opacity-1: 0.9;
108
+ --sbk-card-layer-opacity-2: 0.75;
109
+ --sbk-card-layer-opacity-3: 0.6;
110
+
111
+ /* Movimento */
112
+ --sbk-duration-fast: 150ms;
113
+ --sbk-duration-normal: 250ms;
114
+ --sbk-duration-slow: 400ms;
115
+ --sbk-easing-standard: cubic-bezier(0.4, 0, 0.2, 1);
116
+
117
+ /* Liquid Glass (opt-in): translucidez tingida de verde, desfoque com saturação,
118
+ borda especular e brilho interno. Fallback opaco em prefers-reduced-transparency
119
+ e em navegadores sem backdrop-filter (ver styles/glass.css). */
120
+ --sbk-glass-bg: color-mix(in srgb, var(--sbk-branco) 55%, transparent);
121
+ --sbk-glass-bg-strong: color-mix(in srgb, var(--sbk-branco) 72%, transparent);
122
+ --sbk-glass-tint: color-mix(in srgb, var(--sbk-verde-claro) 6%, transparent);
123
+ --sbk-glass-border: color-mix(in srgb, var(--sbk-branco) 70%, transparent);
124
+ --sbk-glass-highlight: color-mix(in srgb, var(--sbk-branco) 85%, transparent);
125
+ --sbk-glass-blur: 20px;
126
+ --sbk-glass-saturate: 180%;
127
+ --sbk-glass-shadow: 0 0.5rem 2rem rgb(2 54 49 / 0.12);
128
+ --sbk-glass-fallback: var(--sbk-color-surface);
129
+
130
+ /* Camadas */
131
+ --sbk-z-dropdown: 1000;
132
+ --sbk-z-sticky: 1010;
133
+ --sbk-z-modal: 1050;
134
+ --sbk-z-toast: 1100;
135
+ --sbk-z-tooltip: 1200;
48
136
  }
49
137
 
50
- html {
51
- font-family: var(--font-body);
52
- font-size: 1rem;
138
+ /* ---------- Tema institucional SBK (marca-mãe) ---------- */
139
+ [data-brand='sbk'] {
140
+ --sbk-color-primary: var(--sbk-verde-escuro);
141
+ --sbk-color-primary-hover: var(--sbk-verde-profundo);
142
+ --sbk-color-primary-subtle: color-mix(in srgb, var(--sbk-verde-escuro) 10%, var(--sbk-branco));
143
+ --sbk-color-accent: var(--sbk-ciano-escuro);
53
144
  }
54
145
 
146
+ /* ---------- Modo escuro (proposta: o brand book não define tema dark completo) ---------- */
147
+ [data-theme='dark'],
148
+ .theme-dark {
149
+ --sbk-color-bg: var(--sbk-verde-profundo);
150
+ --sbk-color-surface: color-mix(in srgb, var(--sbk-verde-escuro) 70%, var(--sbk-verde-profundo));
151
+ --sbk-color-surface-sunken: var(--sbk-verde-profundo);
152
+ --sbk-color-surface-hover: color-mix(in srgb, var(--sbk-off-white) 6%, var(--sbk-verde-escuro));
153
+ /* Blocos de marca (Header, SideNav escuro, Card inverse) continuam escuros no tema escuro */
154
+ --sbk-color-surface-inverse: var(--sbk-ciano-profundo);
155
+ --sbk-color-overlay: color-mix(in srgb, var(--sbk-preto) 65%, transparent);
156
+
157
+ --sbk-color-fg: var(--sbk-off-white);
158
+ --sbk-color-fg-heading: var(--sbk-branco);
159
+ --sbk-color-fg-muted: color-mix(in srgb, var(--sbk-off-white) 72%, var(--sbk-verde-escuro));
160
+ --sbk-color-fg-inverse: var(--sbk-branco);
161
+
162
+ --sbk-color-line: color-mix(in srgb, var(--sbk-off-white) 16%, var(--sbk-verde-escuro));
163
+ --sbk-color-line-strong: color-mix(in srgb, var(--sbk-off-white) 45%, var(--sbk-verde-escuro));
164
+
165
+ --sbk-color-primary: var(--sbk-ciano);
166
+ --sbk-color-primary-hover: var(--sbk-verde-claro);
167
+ --sbk-color-on-primary: var(--sbk-branco);
168
+ --sbk-color-primary-subtle: color-mix(in srgb, var(--sbk-ciano) 22%, var(--sbk-verde-profundo));
169
+ --sbk-color-secondary: var(--sbk-verde-claro);
170
+ --sbk-color-secondary-hover: var(--sbk-ciano-escuro);
171
+ --sbk-color-focus: var(--sbk-off-white);
172
+
173
+ --sbk-color-success-fg: color-mix(in srgb, var(--sbk-estado-sucesso) 45%, var(--sbk-branco));
174
+ --sbk-color-warning-fg: color-mix(in srgb, var(--sbk-estado-alerta) 50%, var(--sbk-branco));
175
+ --sbk-color-error-fg: color-mix(in srgb, var(--sbk-estado-erro) 45%, var(--sbk-branco));
176
+ --sbk-color-info-fg: color-mix(in srgb, var(--sbk-ciano) 45%, var(--sbk-branco));
177
+
178
+ --sbk-color-success-subtle: color-mix(
179
+ in srgb,
180
+ var(--sbk-estado-sucesso) 28%,
181
+ var(--sbk-verde-profundo)
182
+ );
183
+ --sbk-color-warning-subtle: color-mix(
184
+ in srgb,
185
+ var(--sbk-estado-alerta) 28%,
186
+ var(--sbk-verde-profundo)
187
+ );
188
+ --sbk-color-error-subtle: color-mix(
189
+ in srgb,
190
+ var(--sbk-estado-erro) 28%,
191
+ var(--sbk-verde-profundo)
192
+ );
193
+ --sbk-color-info-subtle: color-mix(in srgb, var(--sbk-ciano) 28%, var(--sbk-verde-profundo));
194
+
195
+ --sbk-shadow-sm: 0 0.0625rem 0.125rem rgb(0 0 0 / 0.3), 0 0.5rem 1.5rem rgb(0 0 0 / 0.25);
196
+ --sbk-shadow-md: 0 0.25rem 0.5rem rgb(0 0 0 / 0.3), 0 0.75rem 2rem rgb(0 0 0 / 0.4);
197
+
198
+ --sbk-glass-bg: color-mix(in srgb, var(--sbk-verde-escuro) 45%, transparent);
199
+ --sbk-glass-bg-strong: color-mix(in srgb, var(--sbk-verde-escuro) 65%, transparent);
200
+ --sbk-glass-tint: color-mix(in srgb, var(--sbk-ciano) 10%, transparent);
201
+ --sbk-glass-border: color-mix(in srgb, var(--sbk-branco) 18%, transparent);
202
+ --sbk-glass-highlight: color-mix(in srgb, var(--sbk-branco) 28%, transparent);
203
+ --sbk-glass-shadow: 0 0.5rem 2rem rgb(0 0 0 / 0.35);
204
+ }
205
+
206
+ /* ============================================================
207
+ 4. ALIASES LEGADOS (1.x): deprecados, serão removidos na 3.0.
208
+ Mantidos para CSS de consumidores que lê essas variáveis.
209
+ Os componentes da 2.x NÃO leem estes nomes: sobrescrever
210
+ --md-primary não altera mais o Button. Use --sbk-color-primary.
211
+ ============================================================ */
55
212
  :root {
56
- --primary-color: var(--brand-verde-vibrante);
57
- --primary-color-dark: var(--brand-verde-profundo);
58
- --primary-color-light: color-mix(in srgb, var(--brand-verde-vibrante) 84%, white);
59
- --primary-color-hover: var(--brand-verde-profundo);
60
- --md-primary: var(--brand-verde-vibrante);
61
- --md-on-primary: #ffffff;
62
- --md-primary-container: color-mix(in srgb, var(--brand-verde-vibrante) 18%, white);
63
- --md-on-primary-container: var(--brand-grafite-azulado);
64
- --secondary-color: var(--brand-grafite-azulado);
65
- /* Tokens semânticos para integração com Tailwind */
66
- --color-primary: var(--primary-color);
67
- --color-on-primary: var(--md-on-primary);
68
- --color-secondary: var(--secondary-color);
69
- --color-on-secondary: var(--md-on-secondary);
70
- --color-surface: var(--md-surface);
71
- --color-on-surface: var(--md-on-surface);
72
- --color-contrast: var(--brand-verde-lima);
73
-
74
- --md-secondary: var(--brand-grafite-azulado);
75
- --md-on-secondary: #ffffff;
76
- --md-outline: var(--brand-azul-acinzentado);
77
- --md-outline-variant: color-mix(in srgb, var(--brand-azul-acinzentado) 35%, white);
78
- --success-color: #22c55e;
79
- --success-color-light: #4ade80;
80
- --error-color: #ef4444;
81
- --error-color-light: #f87171;
82
- --md-error: #ba1a1a;
83
- --md-on-error: #ffffff;
84
- --warning-color: #f59e0b;
85
- --warning-color-light: #fbbe24;
86
- --info-color: #3b82f6;
87
- --info-color-light: #60a5fa;
88
- --neutral-color: var(--brand-cinza-medio);
89
- --neutral-color-light: var(--brand-azul-acinzentado);
90
- --secondary-color-light: var(--brand-azul-acinzentado);
91
- --bg-hover: color-mix(in srgb, var(--brand-grafite-azulado) 8%, white);
92
- --bg-active: color-mix(in srgb, var(--brand-grafite-azulado) 14%, white);
93
- --md-on-surface: var(--brand-grafite-azulado);
94
- --accent-color: var(--primary-color);
95
- --accent-color-hover: var(--primary-color-hover);
96
- --gradient-espectro-turquesa: linear-gradient(
97
- 135deg,
98
- #01b2aa 0%,
99
- #1f3a3a 100%
100
- ); /* Espectro Turquesa — expressão visual primária SBK */
101
- --bg-page: var(--brand-off-white-gelo); /* fundo de página — Off-White Gelo */
102
- --bg-primary: var(--brand-off-white-gelo);
103
- --bg-secondary: #ffffff;
104
- --bg-tertiary: color-mix(in srgb, var(--brand-azul-acinzentado) 14%, white);
105
- --md-surface: #ffffff;
106
- --md-surface-container: var(--brand-neutral-75);
107
- --md-surface-container-high: color-mix(in srgb, var(--brand-azul-acinzentado) 14%, white);
108
- --border-color-hover: color-mix(in srgb, var(--brand-grafite-azulado) 32%, white);
109
- --bg-card: #ffffff;
110
- --bg-card-hover: color-mix(in srgb, var(--brand-azul-acinzentado) 8%, white);
111
- --bg-card-border: color-mix(in srgb, var(--brand-azul-acinzentado) 28%, white);
112
- --text-primary: var(--brand-grafite-azulado);
113
- --text-secondary: var(--brand-cinza-escuro);
114
- --text-tertiary: var(--brand-cinza-medio);
115
- --text-muted: var(--brand-cinza-medio);
116
- --text-on-primary: #ffffff;
117
- --border-color: color-mix(in srgb, var(--brand-azul-acinzentado) 30%, white);
118
- --border-color-focus: color-mix(in srgb, var(--brand-verde-vibrante) 52%, transparent);
119
- --shadow-xs: 0 0.0625rem 0.125rem rgba(0, 0, 0, 0.05);
120
- --shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.08);
121
- --shadow-md: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);
122
- --shadow-lg: 0 0.5rem 1.5rem rgba(0, 0, 0, 0.12);
123
- --font-size-xs: 0.75rem;
124
- --font-size-sm: 0.875rem;
125
- --font-size-base: 1rem;
126
- --font-size-md: 1.125rem;
127
- --font-size-lg: 1.25rem;
128
- --font-size-xl: 1.5rem;
129
- --font-weight-normal: 400; /* Jakarta regular */
130
- --font-weight-medium: 500;
131
- --font-weight-semibold: 600; /* Jakarta seminegrito */
132
- --font-weight-bold: 700;
133
- --line-height-normal: 1.5;
213
+ --brand-verde-vibrante: var(--sbk-verde-claro);
214
+ --brand-verde-profundo: var(--sbk-verde-escuro);
215
+ --brand-verde-medio: var(--sbk-ciano);
216
+ --brand-grafite-azulado: var(--sbk-ciano-profundo);
217
+ --brand-azul-acinzentado: var(--sbk-chumbo-leve);
218
+ --brand-cinza-medio: var(--sbk-chumbo-leve);
219
+ --brand-cinza-escuro: var(--sbk-verde-profundo);
220
+ --brand-off-white: var(--sbk-off-white);
221
+ --brand-off-white-gelo: var(--sbk-off-white);
222
+ --brand-branco: var(--sbk-branco);
223
+ --brand-preto: var(--sbk-preto);
224
+
225
+ --font-primary: var(--sbk-font-family);
226
+ --font-heading: var(--sbk-font-family);
227
+ --font-body: var(--sbk-font-family);
228
+ --font-weight-light: 300;
229
+ --font-weight-semibold: 600;
230
+
231
+ --border-radius-sm: var(--sbk-radius-sm);
232
+ --border-radius-md: var(--sbk-radius-sm);
233
+ --border-radius-lg: var(--sbk-radius-md);
234
+ --border-radius-2xl: var(--sbk-radius-lg);
235
+
236
+ --z-index-dropdown: var(--sbk-z-dropdown);
237
+ --z-index-modal-backdrop: var(--sbk-z-modal);
238
+ --z-index-modal: var(--sbk-z-modal);
239
+
240
+ --border-width-thin: 0.0625rem;
241
+
134
242
  --spacing-xs: 0.25rem;
135
243
  --spacing-sm: 0.5rem;
136
244
  --spacing-md: 0.75rem;
137
245
  --spacing-lg: 1rem;
138
246
  --spacing-xl: 1.5rem;
139
247
  --spacing-2xl: 2rem;
140
- --border-radius-sm: 0.375rem;
141
- --border-radius-md: 0.5rem;
142
- --border-radius-lg: 0.75rem;
143
- --border-width-thin: 0.0625rem;
144
- --transition-base: 0.3s ease;
145
- --transition-all: all var(--transition-base);
146
- --transition-colors:
147
- color var(--transition-base), background-color var(--transition-base),
148
- border-color var(--transition-base);
248
+ --spacing-3xl: 2.5rem;
149
249
 
150
- /* ============================================================
151
- MOTION TOKENS — durações e easings padronizados
152
- Uso: transition: opacity var(--motion-duration-fast) var(--motion-easing-standard)
153
- ============================================================ */
154
- --motion-duration-instant: 75ms; /* micro-feedback: ripple, checkbox tick */
155
- --motion-duration-fast: 150ms; /* hover, focus, small state changes */
156
- --motion-duration-normal: 250ms; /* entrada/saída de elementos pequenos */
157
- --motion-duration-slow: 400ms; /* modais, drawers, page transitions */
158
- --motion-duration-x-slow: 600ms; /* onboarding, animações elaboradas */
159
-
160
- --motion-easing-standard: cubic-bezier(0.4, 0, 0.2, 1); /* padrão — entrada e saída suave */
161
- --motion-easing-decelerate: cubic-bezier(0, 0, 0.2, 1); /* elementos entrando na tela */
162
- --motion-easing-accelerate: cubic-bezier(0.4, 0, 1, 1); /* elementos saindo da tela */
163
- --motion-easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1); /* bounce suave para feedback */
164
- --z-index-dropdown: 1000;
165
- --z-index-modal-backdrop: 1040;
166
- --z-index-modal: 1050;
167
- --border-radius-2xl: 1.25rem;
168
- --shadow-2xl: 0 1.25rem 3.75rem rgba(0, 0, 0, 0.2);
250
+ --font-size-xs: 0.75rem;
251
+ --font-size-sm: 0.875rem;
252
+ --font-size-base: 1rem;
253
+ --font-size-md: 1.125rem;
254
+ --font-size-lg: 1.25rem;
255
+ --font-size-xl: 1.5rem;
169
256
  --font-size-2xl: 1.75rem;
170
257
  --font-size-3xl: 2rem;
171
258
  --font-size-4xl: 2.5rem;
172
- --font-weight-light: 300;
259
+ /* --font-weight-normal/medium/bold não são redefinidos: colidiriam com as variáveis
260
+ do Tailwind 4 (font-normal, font-medium, font-bold) nos apps consumidores. */
173
261
  --line-height-tight: 1.2;
262
+ --line-height-normal: 1.5;
174
263
  --line-height-relaxed: 1.6;
175
264
  --line-height-loose: 1.8;
176
- --md-on-surface-variant: #44474e;
177
- --spacing-3xl: 2.5rem;
178
- }
179
-
180
- [data-theme='dark'],
181
- .theme-dark {
182
- --bg-page: #0a0d12;
183
- --bg-primary: #0f141a;
184
- --bg-secondary: #161b22;
185
- --bg-tertiary: #1b222b;
186
- --bg-card: #161b22;
187
- --bg-card-hover: #1e2630;
188
- --bg-card-border: #2f3a46;
189
- --md-surface: #161b22;
190
- --md-surface-container: #1b222b;
191
- --md-surface-container-high: #222b35;
192
- --md-on-surface: #e6e8eb;
193
- --md-on-surface-variant: #c2c7cf;
194
- --md-outline-variant: #44474e;
195
- --md-primary: var(--brand-verde-vibrante);
196
- --md-on-primary: #062126;
197
- --primary-color: var(--brand-verde-vibrante);
198
- --primary-color-light: color-mix(in srgb, var(--brand-verde-vibrante) 85%, white);
199
- --primary-color-hover: var(--brand-verde-profundo);
200
- --secondary-color: var(--brand-azul-acinzentado);
201
- --color-primary: var(--primary-color);
202
- --color-on-primary: var(--md-on-primary);
203
- --color-secondary: var(--secondary-color);
204
- --color-on-secondary: var(--md-on-secondary);
205
- --color-surface: var(--md-surface);
206
- --color-on-surface: var(--md-on-surface);
207
- --color-contrast: var(--brand-off-white);
208
- --text-primary: #e6e8eb;
209
- --text-secondary: #d1d5db;
210
- --text-muted: #9ca3af;
211
- --border-color: #2f3a46;
212
- --bg-hover: #202a34;
213
- --bg-active: #2a3642;
214
- --border-color-hover: #4b5b69;
215
- --shadow-sm: 0 0.125rem 0.25rem 0 rgba(0, 0, 0, 0.4);
216
- --shadow-md: 0 0.25rem 0.5rem 0 rgba(0, 0, 0, 0.5);
217
- --shadow-lg: 0 0.5rem 1rem 0 rgba(0, 0, 0, 0.6);
218
- }
219
-
220
- /* ============================================================
221
- PALETAS DE BOTÃO (guia de marca)
222
- Use data-button-palette no pai (ex.: body) ou prop palette no Button.
223
- ============================================================ */
224
- [data-button-palette='verde-vibrante'],
225
- .btn--palette-verde-vibrante.btn--primary {
226
- --md-primary: var(--brand-verde-vibrante);
227
- --primary-color-hover: var(--brand-verde-profundo);
228
- }
229
- [data-button-palette='verde-vibrante'] .btn--primary {
230
- --md-primary: var(--brand-verde-vibrante);
231
- --primary-color-hover: var(--brand-verde-profundo);
232
- }
233
-
234
- [data-button-palette='verde-profundo'],
235
- .btn--palette-verde-profundo.btn--primary {
236
- --md-primary: var(--brand-verde-profundo);
237
- --primary-color-hover: var(--brand-grafite-azulado);
238
- }
239
- [data-button-palette='verde-profundo'] .btn--primary {
240
- --md-primary: var(--brand-verde-profundo);
241
- --primary-color-hover: var(--brand-grafite-azulado);
242
- }
243
-
244
- [data-button-palette='grafite-azulado'],
245
- .btn--palette-grafite-azulado.btn--primary {
246
- --md-primary: var(--brand-grafite-azulado);
247
- --primary-color-hover: var(--brand-cinza-escuro);
248
- }
249
- [data-button-palette='grafite-azulado'] .btn--primary {
250
- --md-primary: var(--brand-grafite-azulado);
251
- --primary-color-hover: var(--brand-cinza-escuro);
252
- }
253
-
254
- [data-button-palette='azul-acinzentado'],
255
- .btn--palette-azul-acinzentado.btn--primary {
256
- --md-primary: var(--brand-azul-acinzentado);
257
- --primary-color-hover: var(--brand-grafite-azulado);
258
- }
259
- [data-button-palette='azul-acinzentado'] .btn--primary {
260
- --md-primary: var(--brand-azul-acinzentado);
261
- --primary-color-hover: var(--brand-grafite-azulado);
262
- }
263
265
 
264
- [data-button-palette='cinza-medio'],
265
- .btn--palette-cinza-medio.btn--primary {
266
- --md-primary: var(--brand-cinza-medio);
267
- --primary-color-hover: var(--brand-cinza-escuro);
268
- }
269
- [data-button-palette='cinza-medio'] .btn--primary {
270
- --md-primary: var(--brand-cinza-medio);
271
- --primary-color-hover: var(--brand-cinza-escuro);
272
- }
266
+ --transition-base: var(--sbk-duration-normal) ease;
267
+ --transition-all: all var(--transition-base);
268
+ --transition-colors:
269
+ color var(--transition-base), background-color var(--transition-base),
270
+ border-color var(--transition-base);
273
271
 
274
- [data-button-palette='cinza-escuro'],
275
- .btn--palette-cinza-escuro.btn--primary {
276
- --md-primary: var(--brand-cinza-escuro);
277
- --primary-color-hover: var(--brand-preto);
278
- }
279
- [data-button-palette='cinza-escuro'] .btn--primary {
280
- --md-primary: var(--brand-cinza-escuro);
281
- --primary-color-hover: var(--brand-preto);
272
+ --motion-duration-fast: var(--sbk-duration-fast);
273
+ --motion-duration-normal: var(--sbk-duration-normal);
274
+ --motion-duration-slow: var(--sbk-duration-slow);
275
+ --motion-easing-standard: var(--sbk-easing-standard);
282
276
  }
283
277
 
284
- [data-button-palette='off-white'],
285
- .btn--palette-off-white.btn--primary {
286
- --md-primary: var(--brand-off-white);
287
- --md-on-primary: var(--brand-grafite-azulado);
288
- --primary-color-hover: var(--brand-branco);
289
- }
290
- [data-button-palette='off-white'] .btn--primary {
291
- --md-primary: var(--brand-off-white);
292
- --md-on-primary: var(--brand-grafite-azulado);
293
- --primary-color-hover: var(--brand-branco);
278
+ :root,
279
+ [data-brand='sbk'],
280
+ [data-theme='dark'],
281
+ .theme-dark {
282
+ --primary-color: var(--sbk-color-primary);
283
+ --primary-color-hover: var(--sbk-color-primary-hover);
284
+ --secondary-color: var(--sbk-color-accent);
285
+ --accent-color: var(--sbk-color-accent);
286
+ --md-primary: var(--sbk-color-primary);
287
+ --md-on-primary: var(--sbk-color-on-primary);
288
+ --md-primary-container: var(--sbk-color-primary-subtle);
289
+ --md-secondary: var(--sbk-color-secondary);
290
+ --md-on-secondary: var(--sbk-branco);
291
+ --md-surface: var(--sbk-color-surface);
292
+ --md-on-surface: var(--sbk-color-fg);
293
+ --md-on-surface-variant: var(--sbk-color-fg-muted);
294
+ --md-surface-container: var(--sbk-color-surface-sunken);
295
+ --md-surface-container-high: var(--sbk-color-surface-sunken);
296
+ --md-outline: var(--sbk-color-line-strong);
297
+ --md-outline-variant: var(--sbk-color-line);
298
+ --md-error: var(--sbk-color-error);
299
+ --md-on-error: var(--sbk-color-on-state);
300
+ --color-primary: var(--sbk-color-primary);
301
+ --color-on-primary: var(--sbk-color-on-primary);
302
+ --color-surface: var(--sbk-color-surface);
303
+ --color-on-surface: var(--sbk-color-fg);
304
+ --success-color: var(--sbk-color-success);
305
+ --warning-color: var(--sbk-color-warning);
306
+ --error-color: var(--sbk-color-error);
307
+ --info-color: var(--sbk-color-info);
308
+ --bg-page: var(--sbk-color-bg);
309
+ --bg-primary: var(--sbk-color-bg);
310
+ --bg-secondary: var(--sbk-color-surface);
311
+ --bg-tertiary: var(--sbk-color-surface-sunken);
312
+ --bg-card: var(--sbk-color-surface);
313
+ --bg-card-border: var(--sbk-color-line);
314
+ --bg-hover: var(--sbk-color-surface-hover);
315
+ --text-primary: var(--sbk-color-fg);
316
+ --text-secondary: var(--sbk-color-fg-muted);
317
+ --text-muted: var(--sbk-color-fg-muted);
318
+ --text-on-primary: var(--sbk-color-on-primary);
319
+ --border-color: var(--sbk-color-line);
320
+ --border-color-hover: var(--sbk-color-line-strong);
321
+ --border-color-focus: var(--sbk-color-focus);
322
+ --shadow-sm: var(--sbk-shadow-sm);
323
+ --shadow-md: var(--sbk-shadow-md);
324
+ --shadow-lg: var(--sbk-shadow-md);
325
+ --shadow-xs: var(--sbk-shadow-sm);
326
+ --md-on-primary-container: var(--sbk-color-fg-heading);
294
327
  }