@celke/kole-react 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -22
- package/README.md +525 -401
- package/dist/components/Grafico/Cartesiano.d.ts +23 -0
- package/dist/components/Grafico/GraficoBarras.d.ts +17 -0
- package/dist/components/Grafico/GraficoCombinado.d.ts +20 -0
- package/dist/components/Grafico/GraficoDispersao.d.ts +24 -0
- package/dist/components/Grafico/GraficoLinha.d.ts +18 -0
- package/dist/components/Grafico/MapaCalor.d.ts +25 -0
- package/dist/components/Grafico/Minigrafico.d.ts +11 -0
- package/dist/components/Grafico/MolduraGrafico.d.ts +77 -0
- package/dist/components/Grafico/escalas.d.ts +85 -0
- package/dist/components/Grafico/tipos.d.ts +68 -0
- package/dist/components/Indicador/Indicador.d.ts +5 -1
- package/dist/estilos.css +1 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.js +2818 -1563
- package/dist/index.js.map +1 -1
- package/dist/tailwind.css +82 -82
- package/dist/tokens.css +461 -397
- package/package.json +91 -91
package/dist/tokens.css
CHANGED
|
@@ -1,406 +1,470 @@
|
|
|
1
1
|
@layer kole {
|
|
2
|
-
/* ============================================================
|
|
3
|
-
Celke Kole — Design Tokens
|
|
4
|
-
Fonte única de verdade. NÃO usar hex/px solto em componente.
|
|
5
|
-
Já é importado por `@celke/kole-react/estilos.css`.
|
|
6
|
-
============================================================ */
|
|
7
|
-
|
|
8
|
-
:root {
|
|
9
|
-
/* ---- Marca (paleta Celke: marinho + azul elétrico + laranja) ----
|
|
10
|
-
`--acento*` = o LARANJA de destaque (item ativo, barra de aba, spinner). */
|
|
11
|
-
--acento: #f7931e;
|
|
12
|
-
--acento-claro: #ff9a2e;
|
|
13
|
-
--acento-borda: #e07b0c; /* borda do tile do ativo (sidebar) */
|
|
14
|
-
--acento-tint: rgba(255, 154, 46, .16); /* laranja translúcido (grupo aberto, recolhido) */
|
|
15
|
-
--acento-suave: #ffb057; /* sub-item ativo (texto) — 9,5:1 sobre o marinho */
|
|
16
|
-
/* laranja como TINTA sobre superfície (ícone de ação "Editar"): o laranja
|
|
17
|
-
da marca dá 2,3:1 no branco — este tom escurecido passa dos 3:1 de ícone */
|
|
18
|
-
--destaque-ink: #d97706;
|
|
19
|
-
/* laranja como TEXTO (alerta de destaque): 4,7:1 no fundo laranja-claro e
|
|
20
|
-
5,2:1 no branco — o --destaque-ink (3:1) só serve para ícone */
|
|
21
|
-
--destaque-fg: #c2410c;
|
|
22
|
-
|
|
23
|
-
/* ---- Superfícies / texto (TEMA CLARO = padrão) ---- */
|
|
24
|
-
--bg: #f2f5fa;
|
|
25
|
-
--surface: #ffffff;
|
|
26
|
-
--surf-2: #f8fafd;
|
|
27
|
-
--surf-3: #f1f4f9;
|
|
28
|
-
/* superfície FLUTUANTE (modal/painel de select/calendário) e o degrau de
|
|
29
|
-
apoio sobre ela (faixa do footer, hover de opção). No claro empatam com
|
|
30
|
-
surface/surf-2 (a sombra recorta); no escuro sobem um degrau de LUZ —
|
|
31
|
-
elevação escura se comunica clareando, não sombreando. */
|
|
32
|
-
--surf-raised: #ffffff;
|
|
33
|
-
--surf-raised-2: #f8fafd;
|
|
34
|
-
/* chão do diálogo que carrega SEÇÕES (Form em modal). No claro é o
|
|
35
|
-
canvas da página: a seção (--surface) vira o mesmo card branco do form em
|
|
36
|
-
página. Sem ele, seção e corpo eram o mesmo branco (--surf-raised empata
|
|
37
|
-
com --surface no claro) e o grupo ficava só no contorno — mais fraco que a
|
|
38
|
-
borda dos campos dentro dele. */
|
|
39
|
-
--dlg-canvas: var(--bg);
|
|
40
|
-
--border: #e0e6ef;
|
|
41
|
-
--border-2: #c9d2e0;
|
|
42
|
-
|
|
43
|
-
--ink: #0e1726; /* texto principal */
|
|
44
|
-
--t2: #334055; /* texto forte */
|
|
45
|
-
--t3: #55627a; /* texto de apoio */
|
|
46
|
-
--t4: #7a879c; /* rótulos / secundário */
|
|
47
|
-
--t5: #9ca7b8; /* placeholder */
|
|
48
|
-
--tdis: #bfc8d5; /* desabilitado */
|
|
49
|
-
|
|
50
|
-
/* ---- Ação (azul elétrico da marca) ----
|
|
51
|
-
A cor de AÇÃO é o azul da capa, separado do marinho da sidebar: botão,
|
|
52
|
-
link, ícone e anel de foco têm cor própria e se distinguem do texto.
|
|
53
|
-
Trocar o azul de ação = trocar ESTAS linhas.
|
|
54
|
-
Contraste (medido): branco sobre --pri 5,57:1; --pri sobre --pri-bg 4,91:1. */
|
|
55
|
-
--pri: #1f5fe0;
|
|
56
|
-
--pri-bg: #eaf1ff; /* azul a ~6% — halo de foco, tile, faixa, item ativo */
|
|
57
|
-
--pri-bd: #c3d6fb; /* borda sobre --pri-bg */
|
|
58
|
-
/* `--pri-ink` = tinta sobre `--pri-bg` E o passo de HOVER do botão sólido:
|
|
59
|
-
com tinta branca, o hover ESCURECE (7,68:1). */
|
|
60
|
-
--pri-ink: #174bb8;
|
|
61
|
-
--on-pri: #ffffff; /* texto/ícone sobre o azul sólido */
|
|
62
|
-
|
|
63
|
-
/* ---- Cor institucional da marca (marinho) ----
|
|
64
|
-
`--navy` é o token semântico da marca; sidebar/thead/backdrop/avatar/form
|
|
65
|
-
derivam dele via var(--navy). */
|
|
66
|
-
--navy: #0b1a36; /* marinho da capa */
|
|
67
|
-
--brand-ink: #0b1a36; /* marinho (wordmark do sistema na topbar) */
|
|
68
|
-
|
|
69
|
-
/* ---- Sidebar / cores da sidebar (navy) (Variação D do anexo de sidebar; constante nos
|
|
70
|
-
dois temas — o sidebar é superfície escura sempre) ---- */
|
|
71
|
-
--sidebar-bg: var(--navy); /* fundo do sidebar (= --navy) */
|
|
72
|
-
--sidebar-ink-strong: #ffffff; /* texto branco (marca/ativo) */
|
|
73
|
-
--sidebar-ink: #d6e2f5; /* texto forte (item ativo/marca) */
|
|
74
|
-
--sidebar-ink-2: #a9bcda; /* texto/ícone de item inativo */
|
|
75
|
-
--sidebar-ink-muted: #6f86ad; /* rótulos de grupo / ícones 2ºrios */
|
|
76
|
-
--sidebar-tile: rgba(255, 255, 255, .06); /* tile do ícone (inativo) */
|
|
77
|
-
--sidebar-tile-hover: rgba(255, 255, 255, .12); /* tile no hover */
|
|
78
|
-
--sidebar-item-hover: rgba(255, 255, 255, .06); /* fundo do item no hover */
|
|
79
|
-
--sidebar-item-active: rgba(255, 255, 255, .04); /* fundo do item ativo */
|
|
80
|
-
--sidebar-item-open: rgba(255, 255, 255, .03); /* fundo do grupo aberto (expandido) */
|
|
81
|
-
--sidebar-item-open-c: rgba(255, 255, 255, .05); /* fundo do grupo aberto (recolhido) */
|
|
82
|
-
--sidebar-active-tile: var(--acento-claro); /* tile do ativo (laranja) */
|
|
83
|
-
--sidebar-active-icon: var(--navy); /* ícone sobre o tile laranja (8,2:1) */
|
|
84
|
-
--sidebar-active-bar: var(--acento-claro); /* barra inset 3px do ativo */
|
|
85
|
-
--sidebar-guide: rgba(255, 255, 255, .10); /* guia à esquerda do submenu */
|
|
86
|
-
--sidebar-grp-line: rgba(255, 255, 255, .07); /* linha do rótulo de grupo */
|
|
87
|
-
--sidebar-divider: rgba(255, 255, 255, .08); /* divisórias do sidebar */
|
|
88
|
-
--sidebar-edge: rgba(255, 255, 255, .08); /* aresta externa (costura com o
|
|
89
|
-
conteúdo) — no escuro navy ≈ surface e a separação
|
|
90
|
-
se comunica com LUZ, não com contraste de fundo */
|
|
91
|
-
--sidebar-flyout: #12264a; /* fundo do flyout (recolhido) */
|
|
92
|
-
--sidebar-flyout-bd: #1f3a6b; /* borda do flyout */
|
|
93
|
-
--sidebar-shadow: rgba(8, 18, 40, .28); /* sombra do sidebar flutuante */
|
|
94
|
-
--sidebar-flyout-shadow: rgba(0, 0, 0, .42); /* sombra do flyout */
|
|
95
|
-
|
|
96
|
-
/* ---- Status ----
|
|
97
|
-
-fg calibrado ≥ 4.5:1 sobre o -bg par (DoD; medido: ok 5.53, warn 5.06) */
|
|
98
|
-
--ok-fg: #136f36; --ok-bg: #e7f4ec; --ok-bd: #bfe3cd; --ok-solid: #15803d;
|
|
99
|
-
--warn-fg:#a54c08; --warn-bg:#fbeede; --warn-bd:#f3d5a8; --warn-solid:#b45309;
|
|
100
|
-
--err-fg: #b42318; --err-bg: #fbeae8; --err-bd: #f1c3bd; --err-solid: #b42318;
|
|
101
|
-
/* info = azul próprio (≠ --pri, puxado para o ciano): severidade
|
|
102
|
-
token-backed de "informativo/em análise". */
|
|
103
|
-
--info-fg:#0b6b9e; --info-bg:#e8f6fd; --info-bd:#b3e0f5; --info-solid:#0b72aa;
|
|
104
|
-
/* Tinta sobre cor SÓLIDA saturada (--navy, --err-solid dos campos inválidos):
|
|
105
|
-
branca. Vale onde o fundo é escuro nos DOIS temas. */
|
|
106
|
-
--ink-on-solid: #ffffff;
|
|
107
|
-
|
|
108
|
-
/* ---- Botão sólido por severidade: tinta + passo de hover ----
|
|
109
|
-
A premissa antiga ("branco serve nos dois temas") não se sustenta: no dark
|
|
110
|
-
os sólidos CLAREIAM, e branco sobre o verde dava 3,42:1 e sobre o âmbar
|
|
111
|
-
3,71:1 — reprovados. Aqui cada severidade declara a própria tinta, e o
|
|
112
|
-
hover é TOKEN (não `color-mix` no CSS do componente): o número volta pro
|
|
113
|
-
tokens.css e o contraste fica auditável estado a estado.
|
|
114
|
-
Direção do hover: ele se afasta da TINTA. Tinta branca → escurece; tinta
|
|
115
|
-
escura → clareia (a mesma doutrina de "no escuro, elevação é luz"). */
|
|
116
|
-
--ink-on-ok: #ffffff;
|
|
117
|
-
--ink-on-warn: #ffffff;
|
|
118
|
-
--ink-on-err: #ffffff;
|
|
119
|
-
--ink-on-info: #ffffff;
|
|
120
|
-
--ok-solid-hover: #146d3a;
|
|
121
|
-
--warn-solid-hover: #96480f;
|
|
122
|
-
--err-solid-hover: #96211b;
|
|
123
|
-
--info-solid-hover: #095f8e;
|
|
124
|
-
|
|
125
|
-
/* ---- Cabeçalho de listagem — aliases SEMÂNTICOS. Traje "marca diluída":
|
|
126
|
-
tinta da marca a 18% sobre a superfície — um degrau ACIMA do hover das
|
|
127
|
-
linhas (--pri-bg) e visivelmente mais fundo que o fundo do sistema
|
|
128
|
-
(--bg #f2f4f6; a 12% os dois quase empatavam), escala monotônica
|
|
129
|
-
cabeçalho > hover > zebra. ---- */
|
|
130
|
-
--thead-bg: color-mix(in srgb, var(--pri) 9%, var(--surface));
|
|
131
|
-
--thead-ink: var(--pri);
|
|
132
|
-
--thead-ink-2: var(--pri);
|
|
133
|
-
--thead-ink-muted: color-mix(in srgb, var(--pri) 55%, transparent);
|
|
134
|
-
/* divisória que FECHA a faixa: tinta da marca a 35%, 1px. Em --pri puro
|
|
135
|
-
(2px) era o traço mais forte da tela (12:1 contra a faixa); a 35% fica na
|
|
136
|
-
família das verticais do cabeçalho (22%), um degrau acima delas. */
|
|
137
|
-
--thead-divisor: color-mix(in srgb, var(--pri) 35%, transparent);
|
|
138
|
-
|
|
139
|
-
/* ---- Traço ---- */
|
|
140
|
-
--hairline: 0.0625rem; /* filete de 1px em rem (divisórias, bordas finas) */
|
|
141
|
-
|
|
142
|
-
/* ---- Raio ---- */
|
|
143
|
-
--r-field: 6px;
|
|
144
|
-
--r-btn: 8px; /* retângulo padrão de controles/superfícies (alerta, paginação,
|
|
145
|
-
diálogo, cards de listagem…) — botão de AÇÃO usa --r-pill
|
|
146
|
-
desde a inversão ação×situação (2026-07-17) */
|
|
147
|
-
--r-card: 9px;
|
|
148
|
-
--r-dialog:12px;
|
|
149
|
-
--r-pill: 100rem; /* "infinito": fecha pílula em QUALQUER altura — 20px fixos
|
|
150
|
-
deixavam flancos retos acima de 40px (mordeu no login, cozy
|
|
151
|
-
--d-h 44px; o clamp do CSS só reduz raio EXCEDENTE) */
|
|
152
|
-
|
|
153
|
-
/* ---- Overlays (máscara + recorte de superfície flutuante) ----
|
|
154
|
-
No claro, a máscara navy dima o conteúdo atrás e a SOMBRA recorta o
|
|
155
|
-
modal. No escuro navy ≈ fundo (a máscara não dima nada) e sombra some
|
|
156
|
-
sobre preto — a máscara vira preto e o recorte passa a ser uma hairline
|
|
157
|
-
(elevação no escuro se comunica com luz/borda, não com sombra). */
|
|
158
|
-
--backdrop: color-mix(in srgb, var(--navy) 45%, transparent);
|
|
159
|
-
--overlay-edge: transparent;
|
|
160
|
-
/* sombra padrão de superfície flutuante (painel de select/calendário,
|
|
161
|
-
toast, dialog) — semântica própria, NÃO reusar a --sidebar-shadow do layout */
|
|
162
|
-
--overlay-shadow: rgba(8, 18, 40, .28);
|
|
163
|
-
|
|
164
|
-
/* superfície da DICA (tooltip) — balão de TINTA: alto contraste e efêmero,
|
|
165
|
-
DISTINTO dos painéis flutuantes claros (select/calendário). No claro a
|
|
166
|
-
tinta é escura (texto claro). No escuro clareia um degrau (elevação = luz)
|
|
167
|
-
p/ não sumir no fundo. Contraste ≥ 4.5:1 nos dois temas (DoD). */
|
|
168
|
-
--dica-bg: #12264a;
|
|
169
|
-
--dica-ink: #f4f6f8;
|
|
170
|
-
--dica-edge: transparent;
|
|
171
|
-
|
|
172
|
-
/* ---- Camadas ----
|
|
173
|
-
Sidebar E topbar criam stacking context: os menus internos (--z-flyout)
|
|
174
|
-
valem o z da PRÓPRIA moldura contra o resto da tela; topbar < sidebar para
|
|
175
|
-
o drawer/backdrop mobile (--z-sidebar) cobrir a topbar. Conteúdo de página
|
|
176
|
-
não entra na escala: o form em página vive NO FLUXO (sticky local), não
|
|
177
|
-
como overlay.
|
|
178
|
-
Obs.: overlay do CDK (select/calendário/dialog) é `popover` — vive na TOP
|
|
179
|
-
LAYER do browser, ACIMA de toda esta escala e sem depender dela (z-index
|
|
180
|
-
de documento não ordena a top layer). Quem precisa passar por cima de um
|
|
181
|
-
modal entra na top layer também: é o que o host do toast faz (feedback é
|
|
182
|
-
a última palavra da tela e nunca nasce atrás do backdrop). Já o
|
|
183
|
-
Carregando bloqueante usa --z-dialog de propósito: é espera de
|
|
184
|
-
PÁGINA, não cobre modal aberto. O --z-toast segue como o degrau do toast
|
|
185
|
-
no documento — fallback de browser sem Popover API. */
|
|
186
|
-
--z-topbar: 25;
|
|
187
|
-
--z-sidebar: 30;
|
|
188
|
-
--z-flyout: 40;
|
|
189
|
-
--z-dialog: 70;
|
|
190
|
-
--z-toast: 1100;
|
|
191
|
-
|
|
192
|
-
/* Pouso do toast: abaixo da topbar do layout (3rem) + respiro — toast não
|
|
193
|
-
cobre sino/perfil/tema. A altura da topbar é var LOCAL da Estrutura
|
|
194
|
-
(:host); o host do toast vive na RAIZ do app e não a herda — por isso o
|
|
195
|
-
valor é token global. App com moldura própria (altura outra) sobrepõe. */
|
|
196
|
-
--toast-top: 4rem;
|
|
197
|
-
|
|
198
|
-
/* ---- Densidade (sobrescrita pelas classes .density-*) — default confortável ---- */
|
|
199
|
-
--d-h: 36px; /* altura de controle */
|
|
200
|
-
--d-px: 11px; /* padding horizontal de campo */
|
|
201
|
-
--d-bpx: 16px; /* padding horizontal de botão */
|
|
202
|
-
--d-fs: 14px; /* corpo denso (input/célula/botão) */
|
|
203
|
-
--d-row: 8px; /* padding de linha */
|
|
204
|
-
--d-gap: 13px; /* gap de grid de form */
|
|
205
|
-
--d-card:16px; /* padding de cartão */
|
|
206
|
-
|
|
207
|
-
/* ---- Tipografia ---- */
|
|
208
|
-
/* Inter (variável, do @fontsource) = fonte da interface. Mono NÃO baixa
|
|
209
|
-
fonte: o papel "código/identificador" (CPF, placa, n/total) fica com a mono
|
|
210
|
-
do SISTEMA — 1 fonte no bundle, e 0/O · 1/l seguem distinguíveis. */
|
|
211
|
-
--font-ui: 'Inter Variable', 'Inter', system-ui, -apple-system, sans-serif;
|
|
212
|
-
--lp-font-mono: ui-monospace, 'Cascadia Mono', 'Segoe UI Mono', 'Roboto Mono', monospace;
|
|
213
|
-
|
|
214
|
-
/* ---- Escala tipográfica (padronização 2026-07-06) ----
|
|
215
|
-
TEXTO SÓ NASCE DESTES TOKENS (ou de --d-fs, o corpo denso por
|
|
216
|
-
densidade). Ancorada no consenso enterprise-denso (Carbon/Fluent/
|
|
217
|
-
Ant/Fiori: corpo 14, secundário 12): PISO informativo = caption
|
|
218
|
-
(12px); micro (11px) SÓ para caps estruturais com tracking (rótulo
|
|
219
|
-
de grupo do sidebar, título de índice). Exceções documentadas fora da
|
|
220
|
-
escala: glifo de ícone (geometria), pt de impressão, display do
|
|
221
|
-
login, artwork de dado (placa Mercosul, iniciais de avatar). */
|
|
222
|
-
--fs-micro: 0.6875rem; /* 11px — caps estruturais, contadores */
|
|
223
|
-
--fs-caption: 0.75rem; /* 12px — label de campo, hint/erro, th,
|
|
224
|
-
metadados, paginação */
|
|
225
|
-
--fs-corpo-2: 0.8125rem; /* 13px — secundário denso (item de nav,
|
|
226
|
-
menus, subtítulo de card) */
|
|
227
|
-
--fs-corpo: 0.875rem; /* 14px — corpo de leitura do app */
|
|
228
|
-
--fs-titulo-secao: 1rem; /* 16px — seção de form, título de diálogo */
|
|
229
|
-
--fs-titulo: 1.25rem; /* 20px — título de página (ÚNICO) */
|
|
230
|
-
--fs-display: 1.5rem; /* 24px — números/heros de dashboards */
|
|
231
|
-
--fs-display-2: 2.125rem; /* 34px — hero (saudação do login) */
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
--
|
|
272
|
-
--
|
|
273
|
-
--
|
|
274
|
-
--
|
|
275
|
-
|
|
276
|
-
--
|
|
277
|
-
--
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
--
|
|
286
|
-
|
|
287
|
-
--
|
|
288
|
-
--
|
|
289
|
-
--
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
--ink
|
|
298
|
-
--
|
|
299
|
-
|
|
300
|
-
--
|
|
301
|
-
--
|
|
302
|
-
--
|
|
303
|
-
--
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
--
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
--
|
|
314
|
-
--
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
2
|
+
/* ============================================================
|
|
3
|
+
Celke Kole — Design Tokens
|
|
4
|
+
Fonte única de verdade. NÃO usar hex/px solto em componente.
|
|
5
|
+
Já é importado por `@celke/kole-react/estilos.css`.
|
|
6
|
+
============================================================ */
|
|
7
|
+
|
|
8
|
+
:root {
|
|
9
|
+
/* ---- Marca (paleta Celke: marinho + azul elétrico + laranja) ----
|
|
10
|
+
`--acento*` = o LARANJA de destaque (item ativo, barra de aba, spinner). */
|
|
11
|
+
--acento: #f7931e;
|
|
12
|
+
--acento-claro: #ff9a2e;
|
|
13
|
+
--acento-borda: #e07b0c; /* borda do tile do ativo (sidebar) */
|
|
14
|
+
--acento-tint: rgba(255, 154, 46, .16); /* laranja translúcido (grupo aberto, recolhido) */
|
|
15
|
+
--acento-suave: #ffb057; /* sub-item ativo (texto) — 9,5:1 sobre o marinho */
|
|
16
|
+
/* laranja como TINTA sobre superfície (ícone de ação "Editar"): o laranja
|
|
17
|
+
da marca dá 2,3:1 no branco — este tom escurecido passa dos 3:1 de ícone */
|
|
18
|
+
--destaque-ink: #d97706;
|
|
19
|
+
/* laranja como TEXTO (alerta de destaque): 4,7:1 no fundo laranja-claro e
|
|
20
|
+
5,2:1 no branco — o --destaque-ink (3:1) só serve para ícone */
|
|
21
|
+
--destaque-fg: #c2410c;
|
|
22
|
+
|
|
23
|
+
/* ---- Superfícies / texto (TEMA CLARO = padrão) ---- */
|
|
24
|
+
--bg: #f2f5fa;
|
|
25
|
+
--surface: #ffffff;
|
|
26
|
+
--surf-2: #f8fafd;
|
|
27
|
+
--surf-3: #f1f4f9;
|
|
28
|
+
/* superfície FLUTUANTE (modal/painel de select/calendário) e o degrau de
|
|
29
|
+
apoio sobre ela (faixa do footer, hover de opção). No claro empatam com
|
|
30
|
+
surface/surf-2 (a sombra recorta); no escuro sobem um degrau de LUZ —
|
|
31
|
+
elevação escura se comunica clareando, não sombreando. */
|
|
32
|
+
--surf-raised: #ffffff;
|
|
33
|
+
--surf-raised-2: #f8fafd;
|
|
34
|
+
/* chão do diálogo que carrega SEÇÕES (Form em modal). No claro é o
|
|
35
|
+
canvas da página: a seção (--surface) vira o mesmo card branco do form em
|
|
36
|
+
página. Sem ele, seção e corpo eram o mesmo branco (--surf-raised empata
|
|
37
|
+
com --surface no claro) e o grupo ficava só no contorno — mais fraco que a
|
|
38
|
+
borda dos campos dentro dele. */
|
|
39
|
+
--dlg-canvas: var(--bg);
|
|
40
|
+
--border: #e0e6ef;
|
|
41
|
+
--border-2: #c9d2e0;
|
|
42
|
+
|
|
43
|
+
--ink: #0e1726; /* texto principal */
|
|
44
|
+
--t2: #334055; /* texto forte */
|
|
45
|
+
--t3: #55627a; /* texto de apoio */
|
|
46
|
+
--t4: #7a879c; /* rótulos / secundário */
|
|
47
|
+
--t5: #9ca7b8; /* placeholder */
|
|
48
|
+
--tdis: #bfc8d5; /* desabilitado */
|
|
49
|
+
|
|
50
|
+
/* ---- Ação (azul elétrico da marca) ----
|
|
51
|
+
A cor de AÇÃO é o azul da capa, separado do marinho da sidebar: botão,
|
|
52
|
+
link, ícone e anel de foco têm cor própria e se distinguem do texto.
|
|
53
|
+
Trocar o azul de ação = trocar ESTAS linhas.
|
|
54
|
+
Contraste (medido): branco sobre --pri 5,57:1; --pri sobre --pri-bg 4,91:1. */
|
|
55
|
+
--pri: #1f5fe0;
|
|
56
|
+
--pri-bg: #eaf1ff; /* azul a ~6% — halo de foco, tile, faixa, item ativo */
|
|
57
|
+
--pri-bd: #c3d6fb; /* borda sobre --pri-bg */
|
|
58
|
+
/* `--pri-ink` = tinta sobre `--pri-bg` E o passo de HOVER do botão sólido:
|
|
59
|
+
com tinta branca, o hover ESCURECE (7,68:1). */
|
|
60
|
+
--pri-ink: #174bb8;
|
|
61
|
+
--on-pri: #ffffff; /* texto/ícone sobre o azul sólido */
|
|
62
|
+
|
|
63
|
+
/* ---- Cor institucional da marca (marinho) ----
|
|
64
|
+
`--navy` é o token semântico da marca; sidebar/thead/backdrop/avatar/form
|
|
65
|
+
derivam dele via var(--navy). */
|
|
66
|
+
--navy: #0b1a36; /* marinho da capa */
|
|
67
|
+
--brand-ink: #0b1a36; /* marinho (wordmark do sistema na topbar) */
|
|
68
|
+
|
|
69
|
+
/* ---- Sidebar / cores da sidebar (navy) (Variação D do anexo de sidebar; constante nos
|
|
70
|
+
dois temas — o sidebar é superfície escura sempre) ---- */
|
|
71
|
+
--sidebar-bg: var(--navy); /* fundo do sidebar (= --navy) */
|
|
72
|
+
--sidebar-ink-strong: #ffffff; /* texto branco (marca/ativo) */
|
|
73
|
+
--sidebar-ink: #d6e2f5; /* texto forte (item ativo/marca) */
|
|
74
|
+
--sidebar-ink-2: #a9bcda; /* texto/ícone de item inativo */
|
|
75
|
+
--sidebar-ink-muted: #6f86ad; /* rótulos de grupo / ícones 2ºrios */
|
|
76
|
+
--sidebar-tile: rgba(255, 255, 255, .06); /* tile do ícone (inativo) */
|
|
77
|
+
--sidebar-tile-hover: rgba(255, 255, 255, .12); /* tile no hover */
|
|
78
|
+
--sidebar-item-hover: rgba(255, 255, 255, .06); /* fundo do item no hover */
|
|
79
|
+
--sidebar-item-active: rgba(255, 255, 255, .04); /* fundo do item ativo */
|
|
80
|
+
--sidebar-item-open: rgba(255, 255, 255, .03); /* fundo do grupo aberto (expandido) */
|
|
81
|
+
--sidebar-item-open-c: rgba(255, 255, 255, .05); /* fundo do grupo aberto (recolhido) */
|
|
82
|
+
--sidebar-active-tile: var(--acento-claro); /* tile do ativo (laranja) */
|
|
83
|
+
--sidebar-active-icon: var(--navy); /* ícone sobre o tile laranja (8,2:1) */
|
|
84
|
+
--sidebar-active-bar: var(--acento-claro); /* barra inset 3px do ativo */
|
|
85
|
+
--sidebar-guide: rgba(255, 255, 255, .10); /* guia à esquerda do submenu */
|
|
86
|
+
--sidebar-grp-line: rgba(255, 255, 255, .07); /* linha do rótulo de grupo */
|
|
87
|
+
--sidebar-divider: rgba(255, 255, 255, .08); /* divisórias do sidebar */
|
|
88
|
+
--sidebar-edge: rgba(255, 255, 255, .08); /* aresta externa (costura com o
|
|
89
|
+
conteúdo) — no escuro navy ≈ surface e a separação
|
|
90
|
+
se comunica com LUZ, não com contraste de fundo */
|
|
91
|
+
--sidebar-flyout: #12264a; /* fundo do flyout (recolhido) */
|
|
92
|
+
--sidebar-flyout-bd: #1f3a6b; /* borda do flyout */
|
|
93
|
+
--sidebar-shadow: rgba(8, 18, 40, .28); /* sombra do sidebar flutuante */
|
|
94
|
+
--sidebar-flyout-shadow: rgba(0, 0, 0, .42); /* sombra do flyout */
|
|
95
|
+
|
|
96
|
+
/* ---- Status ----
|
|
97
|
+
-fg calibrado ≥ 4.5:1 sobre o -bg par (DoD; medido: ok 5.53, warn 5.06) */
|
|
98
|
+
--ok-fg: #136f36; --ok-bg: #e7f4ec; --ok-bd: #bfe3cd; --ok-solid: #15803d;
|
|
99
|
+
--warn-fg:#a54c08; --warn-bg:#fbeede; --warn-bd:#f3d5a8; --warn-solid:#b45309;
|
|
100
|
+
--err-fg: #b42318; --err-bg: #fbeae8; --err-bd: #f1c3bd; --err-solid: #b42318;
|
|
101
|
+
/* info = azul próprio (≠ --pri, puxado para o ciano): severidade
|
|
102
|
+
token-backed de "informativo/em análise". */
|
|
103
|
+
--info-fg:#0b6b9e; --info-bg:#e8f6fd; --info-bd:#b3e0f5; --info-solid:#0b72aa;
|
|
104
|
+
/* Tinta sobre cor SÓLIDA saturada (--navy, --err-solid dos campos inválidos):
|
|
105
|
+
branca. Vale onde o fundo é escuro nos DOIS temas. */
|
|
106
|
+
--ink-on-solid: #ffffff;
|
|
107
|
+
|
|
108
|
+
/* ---- Botão sólido por severidade: tinta + passo de hover ----
|
|
109
|
+
A premissa antiga ("branco serve nos dois temas") não se sustenta: no dark
|
|
110
|
+
os sólidos CLAREIAM, e branco sobre o verde dava 3,42:1 e sobre o âmbar
|
|
111
|
+
3,71:1 — reprovados. Aqui cada severidade declara a própria tinta, e o
|
|
112
|
+
hover é TOKEN (não `color-mix` no CSS do componente): o número volta pro
|
|
113
|
+
tokens.css e o contraste fica auditável estado a estado.
|
|
114
|
+
Direção do hover: ele se afasta da TINTA. Tinta branca → escurece; tinta
|
|
115
|
+
escura → clareia (a mesma doutrina de "no escuro, elevação é luz"). */
|
|
116
|
+
--ink-on-ok: #ffffff;
|
|
117
|
+
--ink-on-warn: #ffffff;
|
|
118
|
+
--ink-on-err: #ffffff;
|
|
119
|
+
--ink-on-info: #ffffff;
|
|
120
|
+
--ok-solid-hover: #146d3a;
|
|
121
|
+
--warn-solid-hover: #96480f;
|
|
122
|
+
--err-solid-hover: #96211b;
|
|
123
|
+
--info-solid-hover: #095f8e;
|
|
124
|
+
|
|
125
|
+
/* ---- Cabeçalho de listagem — aliases SEMÂNTICOS. Traje "marca diluída":
|
|
126
|
+
tinta da marca a 18% sobre a superfície — um degrau ACIMA do hover das
|
|
127
|
+
linhas (--pri-bg) e visivelmente mais fundo que o fundo do sistema
|
|
128
|
+
(--bg #f2f4f6; a 12% os dois quase empatavam), escala monotônica
|
|
129
|
+
cabeçalho > hover > zebra. ---- */
|
|
130
|
+
--thead-bg: color-mix(in srgb, var(--pri) 9%, var(--surface));
|
|
131
|
+
--thead-ink: var(--pri);
|
|
132
|
+
--thead-ink-2: var(--pri);
|
|
133
|
+
--thead-ink-muted: color-mix(in srgb, var(--pri) 55%, transparent);
|
|
134
|
+
/* divisória que FECHA a faixa: tinta da marca a 35%, 1px. Em --pri puro
|
|
135
|
+
(2px) era o traço mais forte da tela (12:1 contra a faixa); a 35% fica na
|
|
136
|
+
família das verticais do cabeçalho (22%), um degrau acima delas. */
|
|
137
|
+
--thead-divisor: color-mix(in srgb, var(--pri) 35%, transparent);
|
|
138
|
+
|
|
139
|
+
/* ---- Traço ---- */
|
|
140
|
+
--hairline: 0.0625rem; /* filete de 1px em rem (divisórias, bordas finas) */
|
|
141
|
+
|
|
142
|
+
/* ---- Raio ---- */
|
|
143
|
+
--r-field: 6px;
|
|
144
|
+
--r-btn: 8px; /* retângulo padrão de controles/superfícies (alerta, paginação,
|
|
145
|
+
diálogo, cards de listagem…) — botão de AÇÃO usa --r-pill
|
|
146
|
+
desde a inversão ação×situação (2026-07-17) */
|
|
147
|
+
--r-card: 9px;
|
|
148
|
+
--r-dialog:12px;
|
|
149
|
+
--r-pill: 100rem; /* "infinito": fecha pílula em QUALQUER altura — 20px fixos
|
|
150
|
+
deixavam flancos retos acima de 40px (mordeu no login, cozy
|
|
151
|
+
--d-h 44px; o clamp do CSS só reduz raio EXCEDENTE) */
|
|
152
|
+
|
|
153
|
+
/* ---- Overlays (máscara + recorte de superfície flutuante) ----
|
|
154
|
+
No claro, a máscara navy dima o conteúdo atrás e a SOMBRA recorta o
|
|
155
|
+
modal. No escuro navy ≈ fundo (a máscara não dima nada) e sombra some
|
|
156
|
+
sobre preto — a máscara vira preto e o recorte passa a ser uma hairline
|
|
157
|
+
(elevação no escuro se comunica com luz/borda, não com sombra). */
|
|
158
|
+
--backdrop: color-mix(in srgb, var(--navy) 45%, transparent);
|
|
159
|
+
--overlay-edge: transparent;
|
|
160
|
+
/* sombra padrão de superfície flutuante (painel de select/calendário,
|
|
161
|
+
toast, dialog) — semântica própria, NÃO reusar a --sidebar-shadow do layout */
|
|
162
|
+
--overlay-shadow: rgba(8, 18, 40, .28);
|
|
163
|
+
|
|
164
|
+
/* superfície da DICA (tooltip) — balão de TINTA: alto contraste e efêmero,
|
|
165
|
+
DISTINTO dos painéis flutuantes claros (select/calendário). No claro a
|
|
166
|
+
tinta é escura (texto claro). No escuro clareia um degrau (elevação = luz)
|
|
167
|
+
p/ não sumir no fundo. Contraste ≥ 4.5:1 nos dois temas (DoD). */
|
|
168
|
+
--dica-bg: #12264a;
|
|
169
|
+
--dica-ink: #f4f6f8;
|
|
170
|
+
--dica-edge: transparent;
|
|
171
|
+
|
|
172
|
+
/* ---- Camadas ----
|
|
173
|
+
Sidebar E topbar criam stacking context: os menus internos (--z-flyout)
|
|
174
|
+
valem o z da PRÓPRIA moldura contra o resto da tela; topbar < sidebar para
|
|
175
|
+
o drawer/backdrop mobile (--z-sidebar) cobrir a topbar. Conteúdo de página
|
|
176
|
+
não entra na escala: o form em página vive NO FLUXO (sticky local), não
|
|
177
|
+
como overlay.
|
|
178
|
+
Obs.: overlay do CDK (select/calendário/dialog) é `popover` — vive na TOP
|
|
179
|
+
LAYER do browser, ACIMA de toda esta escala e sem depender dela (z-index
|
|
180
|
+
de documento não ordena a top layer). Quem precisa passar por cima de um
|
|
181
|
+
modal entra na top layer também: é o que o host do toast faz (feedback é
|
|
182
|
+
a última palavra da tela e nunca nasce atrás do backdrop). Já o
|
|
183
|
+
Carregando bloqueante usa --z-dialog de propósito: é espera de
|
|
184
|
+
PÁGINA, não cobre modal aberto. O --z-toast segue como o degrau do toast
|
|
185
|
+
no documento — fallback de browser sem Popover API. */
|
|
186
|
+
--z-topbar: 25;
|
|
187
|
+
--z-sidebar: 30;
|
|
188
|
+
--z-flyout: 40;
|
|
189
|
+
--z-dialog: 70;
|
|
190
|
+
--z-toast: 1100;
|
|
191
|
+
|
|
192
|
+
/* Pouso do toast: abaixo da topbar do layout (3rem) + respiro — toast não
|
|
193
|
+
cobre sino/perfil/tema. A altura da topbar é var LOCAL da Estrutura
|
|
194
|
+
(:host); o host do toast vive na RAIZ do app e não a herda — por isso o
|
|
195
|
+
valor é token global. App com moldura própria (altura outra) sobrepõe. */
|
|
196
|
+
--toast-top: 4rem;
|
|
197
|
+
|
|
198
|
+
/* ---- Densidade (sobrescrita pelas classes .density-*) — default confortável ---- */
|
|
199
|
+
--d-h: 36px; /* altura de controle */
|
|
200
|
+
--d-px: 11px; /* padding horizontal de campo */
|
|
201
|
+
--d-bpx: 16px; /* padding horizontal de botão */
|
|
202
|
+
--d-fs: 14px; /* corpo denso (input/célula/botão) */
|
|
203
|
+
--d-row: 8px; /* padding de linha */
|
|
204
|
+
--d-gap: 13px; /* gap de grid de form */
|
|
205
|
+
--d-card:16px; /* padding de cartão */
|
|
206
|
+
|
|
207
|
+
/* ---- Tipografia ---- */
|
|
208
|
+
/* Inter (variável, do @fontsource) = fonte da interface. Mono NÃO baixa
|
|
209
|
+
fonte: o papel "código/identificador" (CPF, placa, n/total) fica com a mono
|
|
210
|
+
do SISTEMA — 1 fonte no bundle, e 0/O · 1/l seguem distinguíveis. */
|
|
211
|
+
--font-ui: 'Inter Variable', 'Inter', system-ui, -apple-system, sans-serif;
|
|
212
|
+
--lp-font-mono: ui-monospace, 'Cascadia Mono', 'Segoe UI Mono', 'Roboto Mono', monospace;
|
|
213
|
+
|
|
214
|
+
/* ---- Escala tipográfica (padronização 2026-07-06) ----
|
|
215
|
+
TEXTO SÓ NASCE DESTES TOKENS (ou de --d-fs, o corpo denso por
|
|
216
|
+
densidade). Ancorada no consenso enterprise-denso (Carbon/Fluent/
|
|
217
|
+
Ant/Fiori: corpo 14, secundário 12): PISO informativo = caption
|
|
218
|
+
(12px); micro (11px) SÓ para caps estruturais com tracking (rótulo
|
|
219
|
+
de grupo do sidebar, título de índice). Exceções documentadas fora da
|
|
220
|
+
escala: glifo de ícone (geometria), pt de impressão, display do
|
|
221
|
+
login, artwork de dado (placa Mercosul, iniciais de avatar). */
|
|
222
|
+
--fs-micro: 0.6875rem; /* 11px — caps estruturais, contadores */
|
|
223
|
+
--fs-caption: 0.75rem; /* 12px — label de campo, hint/erro, th,
|
|
224
|
+
metadados, paginação */
|
|
225
|
+
--fs-corpo-2: 0.8125rem; /* 13px — secundário denso (item de nav,
|
|
226
|
+
menus, subtítulo de card) */
|
|
227
|
+
--fs-corpo: 0.875rem; /* 14px — corpo de leitura do app */
|
|
228
|
+
--fs-titulo-secao: 1rem; /* 16px — seção de form, título de diálogo */
|
|
229
|
+
--fs-titulo: 1.25rem; /* 20px — título de página (ÚNICO) */
|
|
230
|
+
--fs-display: 1.5rem; /* 24px — números/heros de dashboards */
|
|
231
|
+
--fs-display-2: 2.125rem; /* 34px — hero (saudação do login) */
|
|
232
|
+
|
|
233
|
+
/* ---- Gráficos ----
|
|
234
|
+
Séries: --graf-1 a --graf-6, nesta ordem (a primeira série usa a 1).
|
|
235
|
+
Todas com 3:1 ou mais sobre --surface (claro: 4,3 a 5,9; escuro: 5,6 a 8,4).
|
|
236
|
+
--graf-pos/--graf-neg: barras divergentes (acima/abaixo de zero).
|
|
237
|
+
--graf-seq-1 a 5: mapa de calor, do valor mais baixo ao mais alto.
|
|
238
|
+
Grade, eixo e texto são apoio: ficam abaixo dos dados de propósito. */
|
|
239
|
+
--graf-1: #1f5fe0;
|
|
240
|
+
--graf-2: #d9480f;
|
|
241
|
+
--graf-3: #13795b;
|
|
242
|
+
--graf-4: #7c3aed;
|
|
243
|
+
--graf-5: #c2185b;
|
|
244
|
+
--graf-6: #0e7490;
|
|
245
|
+
--graf-pos: #1f5fe0;
|
|
246
|
+
--graf-neg: #c2410c;
|
|
247
|
+
--graf-seq-1: #e3edfd;
|
|
248
|
+
--graf-seq-2: #b3cdf7;
|
|
249
|
+
--graf-seq-3: #77a5ee;
|
|
250
|
+
--graf-seq-4: #3b78dc;
|
|
251
|
+
--graf-seq-5: #1a4aa6;
|
|
252
|
+
--graf-grade: #edf1f7;
|
|
253
|
+
--graf-eixo: #9ca7b8;
|
|
254
|
+
--graf-texto: #55627a;
|
|
255
|
+
--graf-faixa: rgba(31, 95, 224, .07);
|
|
256
|
+
|
|
257
|
+
color-scheme: light;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/* ============================================================
|
|
261
|
+
TEMA ESCURO — mesmos nomes, valores dessaturados.
|
|
262
|
+
Ative com <html data-theme="dark"> (ou .theme-dark). Com
|
|
263
|
+
<html data-theme="system">, segue o modo do sistema operacional:
|
|
264
|
+
o build copia ESTE bloco para um @media (prefers-color-scheme: dark)
|
|
265
|
+
(scripts/css-kole.mjs) — mantenha só declarações aqui, sem regras aninhadas.
|
|
266
|
+
SÓ NA TELA (@media screen): papel é sempre claro — sem isso,
|
|
267
|
+
imprimir no escuro sai tinta quase-branca sobre papel branco.
|
|
268
|
+
============================================================ */
|
|
269
|
+
@media screen {
|
|
270
|
+
[data-theme="dark"], .theme-dark {
|
|
271
|
+
--bg: #070d1a;
|
|
272
|
+
--surface: #0f1729;
|
|
273
|
+
--surf-2: #141e33;
|
|
274
|
+
--surf-3: #19243c;
|
|
275
|
+
/* flutuante sobe um degrau de luz; o apoio sobe outro (hover visível) */
|
|
276
|
+
--surf-raised: #141e33;
|
|
277
|
+
--surf-raised-2: #19243c;
|
|
278
|
+
/* o chão do diálogo com seções é a própria elevação: a seção (--surface)
|
|
279
|
+
afunda um degrau nela. O --bg da página abriria um buraco no modal. */
|
|
280
|
+
--dlg-canvas: var(--surf-raised);
|
|
281
|
+
--border: #223152;
|
|
282
|
+
--border-2: #2e3f63;
|
|
283
|
+
|
|
284
|
+
--ink: #e8eef8;
|
|
285
|
+
--t2: #b4c0d4;
|
|
286
|
+
--t3: #8a98b0;
|
|
287
|
+
--t4: #6e7c95;
|
|
288
|
+
--t5: #56637b;
|
|
289
|
+
--tdis: #3f4a60;
|
|
290
|
+
|
|
291
|
+
/* No escuro o azul de ação CLAREIA para manter contraste com o fundo
|
|
292
|
+
marinho (5,59:1 sobre --surface); a tinta sobre ele fica escura (5,96:1)
|
|
293
|
+
e o hover segue clareando, coerente com "elevação = luz". */
|
|
294
|
+
--pri: #4d8dff;
|
|
295
|
+
--pri-bg: #13254a;
|
|
296
|
+
--pri-bd: #24427a;
|
|
297
|
+
--pri-ink: #77a8ff;
|
|
298
|
+
--on-pri: #06101f; /* texto/ícone sobre o azul claro do tema escuro */
|
|
299
|
+
|
|
300
|
+
--navy: #0a1428;
|
|
301
|
+
--destaque-ink: #ff9a2e; /* 8,4:1 sobre --surface */
|
|
302
|
+
--destaque-fg: #ffb057; /* 8,1:1 sobre o fundo do alerta de destaque */
|
|
303
|
+
--brand-ink: #e8eef8;
|
|
304
|
+
|
|
305
|
+
/* thead "marinho diluído": no escuro a mix da marca empataria com a própria
|
|
306
|
+
superfície (navy escuro sobre fundo escuro) — elevação aqui é LUZ, um
|
|
307
|
+
degrau acima (mesma régua dos overlays). Tintas seguem dos aliases
|
|
308
|
+
(--pri já vira claro neste tema). */
|
|
309
|
+
--thead-bg: var(--surf-raised-2);
|
|
310
|
+
|
|
311
|
+
--ok-fg:#59d98c; --ok-bg:#14301f; --ok-bd:#235639; --ok-solid:#2f9e54;
|
|
312
|
+
--warn-fg:#f0b057; --warn-bg:#2e2208; --warn-bd:#564214; --warn-solid:#c2710c;
|
|
313
|
+
--err-fg:#f47369; --err-bg:#331513; --err-bd:#5a2620; --err-solid:#cf4034;
|
|
314
|
+
--info-fg:#6fd0ff; --info-bg:#0b2233; --info-bd:#1d4a66; --info-solid:#2aa8e6;
|
|
315
|
+
|
|
316
|
+
/* Verde e âmbar CLAREIAM no escuro: branco por cima reprovava (3,42:1 e
|
|
317
|
+
3,71:1) — a tinta vira escura e o hover CLAREIA (afasta-se da tinta).
|
|
318
|
+
O vermelho continua escuro o bastante p/ tinta branca (4,73:1), então
|
|
319
|
+
segue branco e escurecendo — é a exceção, e é por isso que a tinta é
|
|
320
|
+
declarada POR severidade em vez de uma regra só. */
|
|
321
|
+
--ink-on-ok: #0d1117;
|
|
322
|
+
--ink-on-warn: #0d1117;
|
|
323
|
+
--ink-on-err: #ffffff;
|
|
324
|
+
--ink-on-info: #0d1117;
|
|
325
|
+
--ok-solid-hover: #54af73;
|
|
326
|
+
--warn-solid-hover: #cd8b38;
|
|
327
|
+
--err-solid-hover: #ac3a33;
|
|
328
|
+
--info-solid-hover: #5cbdee;
|
|
329
|
+
|
|
330
|
+
/* overlays: navy 45% não dima nada aqui (navy ≈ fundo) e sombra não
|
|
331
|
+
existe sobre preto — máscara vira preto e o recorte vira hairline */
|
|
332
|
+
--backdrop: rgb(0 0 0 / 0.6);
|
|
333
|
+
--overlay-edge: var(--border-2);
|
|
334
|
+
|
|
335
|
+
/* dica: no escuro a tinta CLAREIA (elevação = luz) p/ destacar do fundo,
|
|
336
|
+
com aresta sutil como os demais flutuantes */
|
|
337
|
+
--dica-bg: #24314d;
|
|
338
|
+
--dica-ink: #eef2f8;
|
|
339
|
+
--dica-edge: var(--border-2);
|
|
340
|
+
|
|
341
|
+
/* gráficos: as séries clareiam para manter 3:1 ou mais sobre o fundo escuro;
|
|
342
|
+
o mapa de calor vai do escuro (baixo) ao claro (alto) */
|
|
343
|
+
--graf-1: #4d8dff;
|
|
344
|
+
--graf-2: #ff8a4c;
|
|
345
|
+
--graf-3: #34c78a;
|
|
346
|
+
--graf-4: #b48cff;
|
|
347
|
+
--graf-5: #f06ba8;
|
|
348
|
+
--graf-6: #2cc3d9;
|
|
349
|
+
--graf-pos: #4d8dff;
|
|
350
|
+
--graf-neg: #ff8a4c;
|
|
351
|
+
--graf-seq-1: #15284a;
|
|
352
|
+
--graf-seq-2: #1f477f;
|
|
353
|
+
--graf-seq-3: #2f6bc0;
|
|
354
|
+
--graf-seq-4: #4f92f0;
|
|
355
|
+
--graf-seq-5: #9cc4ff;
|
|
356
|
+
--graf-grade: #1a2640;
|
|
357
|
+
--graf-eixo: #4a5b7e;
|
|
358
|
+
--graf-texto: #8a98b0;
|
|
359
|
+
--graf-faixa: rgba(77, 141, 255, .1);
|
|
360
|
+
|
|
361
|
+
color-scheme: dark;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
/* ============================================================
|
|
366
|
+
DENSIDADE — aplique a classe no layout (ex.: <body class="density-compact">)
|
|
367
|
+
============================================================ */
|
|
368
|
+
.density-compact { --d-h:30px; --d-px:9px; --d-bpx:14px; --d-fs:13px; --d-row:5px; --d-gap:10px; --d-card:12px; }
|
|
369
|
+
.density-comfortable { --d-h:36px; --d-px:11px; --d-bpx:16px; --d-fs:14px; --d-row:8px; --d-gap:13px; --d-card:16px; }
|
|
370
|
+
.density-cozy { --d-h:44px; --d-px:13px; --d-bpx:18px; --d-fs:15px; --d-row:11px; --d-gap:16px; --d-card:20px; }
|
|
371
|
+
|
|
372
|
+
/* Base recomendada */
|
|
329
373
|
body { background: var(--bg); color: var(--ink); font-family: var(--font-ui); }
|
|
330
374
|
|
|
331
375
|
/* tema "sistema": gerado do bloco escuro acima (scripts/css-kole.mjs) */
|
|
332
376
|
@media screen and (prefers-color-scheme: dark) {
|
|
333
377
|
[data-theme="system"] {
|
|
334
|
-
--bg: #070d1a;
|
|
335
|
-
--surface: #0f1729;
|
|
336
|
-
--surf-2: #141e33;
|
|
337
|
-
--surf-3: #19243c;
|
|
338
|
-
/* flutuante sobe um degrau de luz; o apoio sobe outro (hover visível) */
|
|
339
|
-
--surf-raised: #141e33;
|
|
340
|
-
--surf-raised-2: #19243c;
|
|
341
|
-
/* o chão do diálogo com seções é a própria elevação: a seção (--surface)
|
|
342
|
-
afunda um degrau nela. O --bg da página abriria um buraco no modal. */
|
|
343
|
-
--dlg-canvas: var(--surf-raised);
|
|
344
|
-
--border: #223152;
|
|
345
|
-
--border-2: #2e3f63;
|
|
346
|
-
|
|
347
|
-
--ink: #e8eef8;
|
|
348
|
-
--t2: #b4c0d4;
|
|
349
|
-
--t3: #8a98b0;
|
|
350
|
-
--t4: #6e7c95;
|
|
351
|
-
--t5: #56637b;
|
|
352
|
-
--tdis: #3f4a60;
|
|
353
|
-
|
|
354
|
-
/* No escuro o azul de ação CLAREIA para manter contraste com o fundo
|
|
355
|
-
marinho (5,59:1 sobre --surface); a tinta sobre ele fica escura (5,96:1)
|
|
356
|
-
e o hover segue clareando, coerente com "elevação = luz". */
|
|
357
|
-
--pri: #4d8dff;
|
|
358
|
-
--pri-bg: #13254a;
|
|
359
|
-
--pri-bd: #24427a;
|
|
360
|
-
--pri-ink: #77a8ff;
|
|
361
|
-
--on-pri: #06101f; /* texto/ícone sobre o azul claro do tema escuro */
|
|
362
|
-
|
|
363
|
-
--navy: #0a1428;
|
|
364
|
-
--destaque-ink: #ff9a2e; /* 8,4:1 sobre --surface */
|
|
365
|
-
--destaque-fg: #ffb057; /* 8,1:1 sobre o fundo do alerta de destaque */
|
|
366
|
-
--brand-ink: #e8eef8;
|
|
367
|
-
|
|
368
|
-
/* thead "marinho diluído": no escuro a mix da marca empataria com a própria
|
|
369
|
-
superfície (navy escuro sobre fundo escuro) — elevação aqui é LUZ, um
|
|
370
|
-
degrau acima (mesma régua dos overlays). Tintas seguem dos aliases
|
|
371
|
-
(--pri já vira claro neste tema). */
|
|
372
|
-
--thead-bg: var(--surf-raised-2);
|
|
373
|
-
|
|
374
|
-
--ok-fg:#59d98c; --ok-bg:#14301f; --ok-bd:#235639; --ok-solid:#2f9e54;
|
|
375
|
-
--warn-fg:#f0b057; --warn-bg:#2e2208; --warn-bd:#564214; --warn-solid:#c2710c;
|
|
376
|
-
--err-fg:#f47369; --err-bg:#331513; --err-bd:#5a2620; --err-solid:#cf4034;
|
|
377
|
-
--info-fg:#6fd0ff; --info-bg:#0b2233; --info-bd:#1d4a66; --info-solid:#2aa8e6;
|
|
378
|
-
|
|
379
|
-
/* Verde e âmbar CLAREIAM no escuro: branco por cima reprovava (3,42:1 e
|
|
380
|
-
3,71:1) — a tinta vira escura e o hover CLAREIA (afasta-se da tinta).
|
|
381
|
-
O vermelho continua escuro o bastante p/ tinta branca (4,73:1), então
|
|
382
|
-
segue branco e escurecendo — é a exceção, e é por isso que a tinta é
|
|
383
|
-
declarada POR severidade em vez de uma regra só. */
|
|
384
|
-
--ink-on-ok: #0d1117;
|
|
385
|
-
--ink-on-warn: #0d1117;
|
|
386
|
-
--ink-on-err: #ffffff;
|
|
387
|
-
--ink-on-info: #0d1117;
|
|
388
|
-
--ok-solid-hover: #54af73;
|
|
389
|
-
--warn-solid-hover: #cd8b38;
|
|
390
|
-
--err-solid-hover: #ac3a33;
|
|
391
|
-
--info-solid-hover: #5cbdee;
|
|
392
|
-
|
|
393
|
-
/* overlays: navy 45% não dima nada aqui (navy ≈ fundo) e sombra não
|
|
394
|
-
existe sobre preto — máscara vira preto e o recorte vira hairline */
|
|
395
|
-
--backdrop: rgb(0 0 0 / 0.6);
|
|
396
|
-
--overlay-edge: var(--border-2);
|
|
397
|
-
|
|
398
|
-
/* dica: no escuro a tinta CLAREIA (elevação = luz) p/ destacar do fundo,
|
|
399
|
-
com aresta sutil como os demais flutuantes */
|
|
400
|
-
--dica-bg: #24314d;
|
|
401
|
-
--dica-ink: #eef2f8;
|
|
402
|
-
--dica-edge: var(--border-2);
|
|
403
|
-
|
|
378
|
+
--bg: #070d1a;
|
|
379
|
+
--surface: #0f1729;
|
|
380
|
+
--surf-2: #141e33;
|
|
381
|
+
--surf-3: #19243c;
|
|
382
|
+
/* flutuante sobe um degrau de luz; o apoio sobe outro (hover visível) */
|
|
383
|
+
--surf-raised: #141e33;
|
|
384
|
+
--surf-raised-2: #19243c;
|
|
385
|
+
/* o chão do diálogo com seções é a própria elevação: a seção (--surface)
|
|
386
|
+
afunda um degrau nela. O --bg da página abriria um buraco no modal. */
|
|
387
|
+
--dlg-canvas: var(--surf-raised);
|
|
388
|
+
--border: #223152;
|
|
389
|
+
--border-2: #2e3f63;
|
|
390
|
+
|
|
391
|
+
--ink: #e8eef8;
|
|
392
|
+
--t2: #b4c0d4;
|
|
393
|
+
--t3: #8a98b0;
|
|
394
|
+
--t4: #6e7c95;
|
|
395
|
+
--t5: #56637b;
|
|
396
|
+
--tdis: #3f4a60;
|
|
397
|
+
|
|
398
|
+
/* No escuro o azul de ação CLAREIA para manter contraste com o fundo
|
|
399
|
+
marinho (5,59:1 sobre --surface); a tinta sobre ele fica escura (5,96:1)
|
|
400
|
+
e o hover segue clareando, coerente com "elevação = luz". */
|
|
401
|
+
--pri: #4d8dff;
|
|
402
|
+
--pri-bg: #13254a;
|
|
403
|
+
--pri-bd: #24427a;
|
|
404
|
+
--pri-ink: #77a8ff;
|
|
405
|
+
--on-pri: #06101f; /* texto/ícone sobre o azul claro do tema escuro */
|
|
406
|
+
|
|
407
|
+
--navy: #0a1428;
|
|
408
|
+
--destaque-ink: #ff9a2e; /* 8,4:1 sobre --surface */
|
|
409
|
+
--destaque-fg: #ffb057; /* 8,1:1 sobre o fundo do alerta de destaque */
|
|
410
|
+
--brand-ink: #e8eef8;
|
|
411
|
+
|
|
412
|
+
/* thead "marinho diluído": no escuro a mix da marca empataria com a própria
|
|
413
|
+
superfície (navy escuro sobre fundo escuro) — elevação aqui é LUZ, um
|
|
414
|
+
degrau acima (mesma régua dos overlays). Tintas seguem dos aliases
|
|
415
|
+
(--pri já vira claro neste tema). */
|
|
416
|
+
--thead-bg: var(--surf-raised-2);
|
|
417
|
+
|
|
418
|
+
--ok-fg:#59d98c; --ok-bg:#14301f; --ok-bd:#235639; --ok-solid:#2f9e54;
|
|
419
|
+
--warn-fg:#f0b057; --warn-bg:#2e2208; --warn-bd:#564214; --warn-solid:#c2710c;
|
|
420
|
+
--err-fg:#f47369; --err-bg:#331513; --err-bd:#5a2620; --err-solid:#cf4034;
|
|
421
|
+
--info-fg:#6fd0ff; --info-bg:#0b2233; --info-bd:#1d4a66; --info-solid:#2aa8e6;
|
|
422
|
+
|
|
423
|
+
/* Verde e âmbar CLAREIAM no escuro: branco por cima reprovava (3,42:1 e
|
|
424
|
+
3,71:1) — a tinta vira escura e o hover CLAREIA (afasta-se da tinta).
|
|
425
|
+
O vermelho continua escuro o bastante p/ tinta branca (4,73:1), então
|
|
426
|
+
segue branco e escurecendo — é a exceção, e é por isso que a tinta é
|
|
427
|
+
declarada POR severidade em vez de uma regra só. */
|
|
428
|
+
--ink-on-ok: #0d1117;
|
|
429
|
+
--ink-on-warn: #0d1117;
|
|
430
|
+
--ink-on-err: #ffffff;
|
|
431
|
+
--ink-on-info: #0d1117;
|
|
432
|
+
--ok-solid-hover: #54af73;
|
|
433
|
+
--warn-solid-hover: #cd8b38;
|
|
434
|
+
--err-solid-hover: #ac3a33;
|
|
435
|
+
--info-solid-hover: #5cbdee;
|
|
436
|
+
|
|
437
|
+
/* overlays: navy 45% não dima nada aqui (navy ≈ fundo) e sombra não
|
|
438
|
+
existe sobre preto — máscara vira preto e o recorte vira hairline */
|
|
439
|
+
--backdrop: rgb(0 0 0 / 0.6);
|
|
440
|
+
--overlay-edge: var(--border-2);
|
|
441
|
+
|
|
442
|
+
/* dica: no escuro a tinta CLAREIA (elevação = luz) p/ destacar do fundo,
|
|
443
|
+
com aresta sutil como os demais flutuantes */
|
|
444
|
+
--dica-bg: #24314d;
|
|
445
|
+
--dica-ink: #eef2f8;
|
|
446
|
+
--dica-edge: var(--border-2);
|
|
447
|
+
|
|
448
|
+
/* gráficos: as séries clareiam para manter 3:1 ou mais sobre o fundo escuro;
|
|
449
|
+
o mapa de calor vai do escuro (baixo) ao claro (alto) */
|
|
450
|
+
--graf-1: #4d8dff;
|
|
451
|
+
--graf-2: #ff8a4c;
|
|
452
|
+
--graf-3: #34c78a;
|
|
453
|
+
--graf-4: #b48cff;
|
|
454
|
+
--graf-5: #f06ba8;
|
|
455
|
+
--graf-6: #2cc3d9;
|
|
456
|
+
--graf-pos: #4d8dff;
|
|
457
|
+
--graf-neg: #ff8a4c;
|
|
458
|
+
--graf-seq-1: #15284a;
|
|
459
|
+
--graf-seq-2: #1f477f;
|
|
460
|
+
--graf-seq-3: #2f6bc0;
|
|
461
|
+
--graf-seq-4: #4f92f0;
|
|
462
|
+
--graf-seq-5: #9cc4ff;
|
|
463
|
+
--graf-grade: #1a2640;
|
|
464
|
+
--graf-eixo: #4a5b7e;
|
|
465
|
+
--graf-texto: #8a98b0;
|
|
466
|
+
--graf-faixa: rgba(77, 141, 255, .1);
|
|
467
|
+
|
|
404
468
|
color-scheme: dark;
|
|
405
469
|
}
|
|
406
470
|
}
|