@semacode/cli 2.0.1 → 2.1.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 (103) hide show
  1. package/LICENSE +39 -39
  2. package/README.md +125 -121
  3. package/dist/agentEntryPoints.js +499 -499
  4. package/dist/doctorCommand.js +28 -0
  5. package/dist/geracaoCore.js +97 -1
  6. package/dist/iaPrompts.d.ts +1 -1
  7. package/dist/iaPrompts.js +307 -307
  8. package/dist/index.part01.js +4 -3
  9. package/dist/index.part02.js +21 -21
  10. package/dist/index.part04.js +96 -96
  11. package/dist/index.part06.js +1 -1
  12. package/dist/index.part07.js +35 -24
  13. package/dist/init/templates.part01.js +393 -393
  14. package/dist/init/templates.part02.js +189 -189
  15. package/dist/initTemplatesBackend.js +73 -73
  16. package/dist/initTemplatesBase.js +81 -81
  17. package/dist/initTemplatesFlutter.js +137 -137
  18. package/dist/initTemplatesRuntime.js +350 -350
  19. package/dist/initTemplatesWeb.js +309 -309
  20. package/dist/nativeToolchains.d.ts +15 -0
  21. package/dist/nativeToolchains.js +132 -0
  22. package/dist/projetoConfig.js +7 -1
  23. package/dist/projetoResolucao.js +21 -6
  24. package/dist/sync/index.js +35 -35
  25. package/docs/README.md +25 -25
  26. package/docs/ai-onboarding.md +62 -62
  27. package/docs/ai-workflow.md +1 -1
  28. package/docs/auth.md +26 -26
  29. package/docs/cli.md +79 -72
  30. package/docs/commands.md +1 -1
  31. package/docs/database.md +15 -15
  32. package/docs/deploy.md +41 -36
  33. package/docs/documentation.md +39 -39
  34. package/docs/env.md +16 -16
  35. package/docs/frontend.md +41 -41
  36. package/docs/getting-started.md +57 -57
  37. package/docs/i18n.md +15 -15
  38. package/docs/profiles.md +45 -43
  39. package/docs/repositories.md +43 -43
  40. package/docs/rollback.md +31 -31
  41. package/docs/security.md +32 -32
  42. package/docs/support.md +8 -8
  43. package/docs/syntax.md +1 -1
  44. package/docs/testing.md +35 -28
  45. package/docs/vocabulary.md +29 -29
  46. package/exemplos/agendamento.sema +1 -1
  47. package/exemplos/assinatura.sema +1 -1
  48. package/exemplos/auditoria.sema +1 -1
  49. package/exemplos/autenticacao.sema +1 -1
  50. package/exemplos/author_obra_comum.sema +1 -1
  51. package/exemplos/author_tema_sensivel.sema +1 -1
  52. package/exemplos/automacao.sema +1 -1
  53. package/exemplos/cadastro_usuario.sema +1 -1
  54. package/exemplos/calculadora.sema +1 -1
  55. package/exemplos/crud_simples.sema +1 -1
  56. package/exemplos/estoque.sema +1 -1
  57. package/exemplos/exportacao.sema +1 -1
  58. package/exemplos/fila.sema +1 -1
  59. package/exemplos/integracao_externa.sema +1 -1
  60. package/exemplos/multi_tenant.sema +1 -1
  61. package/exemplos/notificacao.sema +1 -1
  62. package/exemplos/operacao_estrategia.sema +132 -132
  63. package/exemplos/operacao_estrategia_discovery.sema +220 -220
  64. package/exemplos/operacao_estrategia_fluxo.sema +114 -114
  65. package/exemplos/operacao_estrategia_gates.sema +106 -106
  66. package/exemplos/operacao_estrategia_quarentena.sema +133 -133
  67. package/exemplos/operacao_estrategia_rollout.sema +124 -124
  68. package/exemplos/pagamento.sema +1 -1
  69. package/exemplos/pagamento_dominio.sema +1 -1
  70. package/exemplos/pedido.sema +1 -1
  71. package/exemplos/permissao.sema +1 -1
  72. package/exemplos/persistencia_vendor_first.sema +1 -1
  73. package/exemplos/profile_conversas.sema +165 -165
  74. package/exemplos/profile_game.sema +1 -1
  75. package/exemplos/profile_legal.sema +1 -1
  76. package/exemplos/profile_ops.sema +1 -1
  77. package/exemplos/profile_research.sema +1 -1
  78. package/exemplos/profile_software.sema +1 -1
  79. package/exemplos/profile_workflow_n8n.sema +1 -1
  80. package/exemplos/relatorio.sema +1 -1
  81. package/exemplos/replica_analitica_erp.sema +1 -1
  82. package/exemplos/testes_embutidos.sema +1 -1
  83. package/exemplos/tratamento_erro.sema +1 -1
  84. package/exemplos/upload_arquivo.sema +1 -1
  85. package/exemplos/webhook.sema +1 -1
  86. package/node_modules/@sema/gerador-cpp/dist/index.d.ts +3 -0
  87. package/node_modules/@sema/gerador-cpp/dist/index.js +859 -0
  88. package/node_modules/@sema/gerador-cpp/dist/index.js.map +1 -0
  89. package/node_modules/@sema/gerador-cpp/package.json +7 -0
  90. package/node_modules/@sema/gerador-css/dist/index.part01.js +10 -10
  91. package/node_modules/@sema/gerador-css/dist/index.part02.js +460 -460
  92. package/node_modules/@sema/gerador-dotnet/dist/index.d.ts +3 -0
  93. package/node_modules/@sema/gerador-dotnet/dist/index.js +828 -0
  94. package/node_modules/@sema/gerador-dotnet/dist/index.js.map +1 -0
  95. package/node_modules/@sema/gerador-dotnet/package.json +7 -0
  96. package/node_modules/@sema/gerador-html/dist/index.js +17 -17
  97. package/node_modules/@sema/gerador-lua/dist/index.js +5 -5
  98. package/node_modules/@sema/gerador-php/dist/index.js +113 -113
  99. package/node_modules/@sema/gerador-python/dist/index.part02.js +3 -3
  100. package/node_modules/@sema/gerador-typescript/dist/index.part02.js +11 -11
  101. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js +42 -42
  102. package/node_modules/@sema/padroes/dist/index.d.ts +1 -1
  103. package/package.json +5 -1
@@ -5,466 +5,466 @@ export function gerarCss(modulo) {
5
5
  const entidades = modulo.entities.map(gerarEstilosEntity).join("\n");
6
6
  const tasks = modulo.tasks.map(gerarEstilosTask).join("\n");
7
7
  const enums = modulo.enums.map(gerarEstilosEnum).join("\n");
8
- const css = `${gerarCabecalhoSemaCss(modulo)}
9
- /* ========================================
10
- Design System — Variaveis
11
- ======================================== */
12
- :root {
13
- /* Cores principais */
14
- --sema-cor-primaria: #6366f1;
15
- --sema-cor-primaria-hover: #4f46e5;
16
- --sema-cor-primaria-suave: #eef2ff;
17
- --sema-cor-sucesso: #10b981;
18
- --sema-cor-sucesso-fundo: #ecfdf5;
19
- --sema-cor-erro: #ef4444;
20
- --sema-cor-erro-texto: #991b1b;
21
- --sema-cor-erro-fundo: #fef2f2;
22
- --sema-cor-aviso: #f59e0b;
23
- --sema-cor-info: #3b82f6;
24
- /* Neutros */
25
- --sema-cor-fundo: #fafafa;
26
- --sema-cor-superficie: #ffffff;
27
- --sema-cor-texto: #18181b;
28
- --sema-cor-texto-secundario: #71717a;
29
- --sema-cor-borda: #e4e4e7;
30
- --sema-cor-borda-foco: #a5b4fc;
31
- --sema-cor-entidade: #8b5cf6;
32
- /* Tipografia */
33
- --sema-fonte: "Inter", "Segoe UI", system-ui, -apple-system, sans-serif;
34
- --sema-fonte-mono: "JetBrains Mono", "Fira Code", "Consolas", monospace;
35
- --sema-tamanho-base: 0.9375rem;
36
- --sema-tamanho-titulo: 1.75rem;
37
- --sema-tamanho-subtitulo: 1.25rem;
38
- --sema-tamanho-pequeno: 0.8125rem;
39
- /* Espacamento */
40
- --sema-espacamento-xs: 0.25rem;
41
- --sema-espacamento-sm: 0.5rem;
42
- --sema-espacamento-md: 1rem;
43
- --sema-espacamento-lg: 1.5rem;
44
- --sema-espacamento-xl: 2rem;
45
- /* Bordas e sombras */
46
- --sema-raio: 0.5rem;
47
- --sema-raio-lg: 0.75rem;
48
- --sema-sombra: 0 1px 3px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.04);
49
- --sema-sombra-lg: 0 4px 12px rgba(0, 0, 0, 0.1);
50
- /* Transicoes */
51
- --sema-transicao: 150ms ease;
52
- --sema-transicao-lenta: 300ms ease;
53
- }
54
- /* ========================================
55
- Dark Mode
56
- ======================================== */
57
- @media (prefers-color-scheme: dark) {
58
- :root {
59
- --sema-cor-primaria: #818cf8;
60
- --sema-cor-primaria-hover: #a5b4fc;
61
- --sema-cor-primaria-suave: #1e1b4b;
62
- --sema-cor-sucesso: #34d399;
63
- --sema-cor-sucesso-fundo: #064e3b;
64
- --sema-cor-erro: #f87171;
65
- --sema-cor-erro-texto: #fecaca;
66
- --sema-cor-erro-fundo: #450a0a;
67
- --sema-cor-fundo: #09090b;
68
- --sema-cor-superficie: #18181b;
69
- --sema-cor-texto: #fafafa;
70
- --sema-cor-texto-secundario: #a1a1aa;
71
- --sema-cor-borda: #3f3f46;
72
- --sema-cor-borda-foco: #6366f1;
73
- --sema-cor-entidade: #a78bfa;
74
- }
75
- }
76
- /* ========================================
77
- Base
78
- ======================================== */
79
- *, *::before, *::after {
80
- box-sizing: border-box;
81
- margin: 0;
82
- padding: 0;
83
- }
84
- body {
85
- font-family: var(--sema-fonte);
86
- font-size: var(--sema-tamanho-base);
87
- line-height: 1.6;
88
- color: var(--sema-cor-texto);
89
- background-color: var(--sema-cor-fundo);
90
- -webkit-font-smoothing: antialiased;
91
- }
92
- /* ========================================
93
- Layout
94
- ======================================== */
95
- .sema-header {
96
- background: var(--sema-cor-superficie);
97
- border-bottom: 1px solid var(--sema-cor-borda);
98
- padding: var(--sema-espacamento-xl) var(--sema-espacamento-lg);
99
- text-align: center;
100
- }
101
- .sema-header h1 {
102
- font-size: var(--sema-tamanho-titulo);
103
- font-weight: 700;
104
- color: var(--sema-cor-primaria);
105
- letter-spacing: -0.02em;
106
- }
107
- .sema-subtitulo {
108
- color: var(--sema-cor-texto-secundario);
109
- font-size: var(--sema-tamanho-pequeno);
110
- margin-top: var(--sema-espacamento-xs);
111
- }
112
- .sema-main {
113
- max-width: 64rem;
114
- margin: 0 auto;
115
- padding: var(--sema-espacamento-xl) var(--sema-espacamento-lg);
116
- display: flex;
117
- flex-direction: column;
118
- gap: var(--sema-espacamento-lg);
119
- }
120
- .sema-footer {
121
- text-align: center;
122
- padding: var(--sema-espacamento-lg);
123
- color: var(--sema-cor-texto-secundario);
124
- font-size: var(--sema-tamanho-pequeno);
125
- border-top: 1px solid var(--sema-cor-borda);
126
- }
127
- .sema-footer code {
128
- font-family: var(--sema-fonte-mono);
129
- background: var(--sema-cor-primaria-suave);
130
- padding: 0.125rem 0.375rem;
131
- border-radius: 0.25rem;
132
- font-size: 0.8125rem;
133
- }
134
- /* ========================================
135
- Entities
136
- ======================================== */
137
- .sema-entity,
138
- .sema-task,
139
- .sema-enum,
140
- .sema-state,
141
- .sema-flow,
142
- .sema-route {
143
- background: var(--sema-cor-superficie);
144
- border: 1px solid var(--sema-cor-borda);
145
- border-radius: var(--sema-raio-lg);
146
- padding: var(--sema-espacamento-lg);
147
- box-shadow: var(--sema-sombra);
148
- transition: box-shadow var(--sema-transicao);
149
- }
150
- .sema-entity:hover,
151
- .sema-task:hover,
152
- .sema-route:hover {
153
- box-shadow: var(--sema-sombra-lg);
154
- }
155
- .sema-entity h3,
156
- .sema-task h3,
157
- .sema-enum h3,
158
- .sema-state h3,
159
- .sema-flow h3,
160
- .sema-route h3 {
161
- font-size: var(--sema-tamanho-subtitulo);
162
- font-weight: 600;
163
- margin-bottom: var(--sema-espacamento-md);
164
- color: var(--sema-cor-texto);
165
- }
166
- /* ========================================
167
- Tabelas de Entity
168
- ======================================== */
169
- .sema-tabela {
170
- width: 100%;
171
- border-collapse: collapse;
172
- font-size: var(--sema-tamanho-pequeno);
173
- }
174
- .sema-tabela th {
175
- text-align: left;
176
- padding: var(--sema-espacamento-sm) var(--sema-espacamento-md);
177
- background: var(--sema-cor-primaria-suave);
178
- border-bottom: 2px solid var(--sema-cor-borda);
179
- font-weight: 600;
180
- white-space: nowrap;
181
- }
182
- .sema-tabela th small {
183
- color: var(--sema-cor-texto-secundario);
184
- font-weight: 400;
185
- margin-left: 0.25rem;
186
- }
187
- .sema-tabela td {
188
- padding: var(--sema-espacamento-sm) var(--sema-espacamento-md);
189
- border-bottom: 1px solid var(--sema-cor-borda);
190
- color: var(--sema-cor-texto-secundario);
191
- }
192
- /* ========================================
193
- Formularios de Task
194
- ======================================== */
195
- .sema-formulario fieldset {
196
- border: 1px solid var(--sema-cor-borda);
197
- border-radius: var(--sema-raio);
198
- padding: var(--sema-espacamento-md);
199
- margin-bottom: var(--sema-espacamento-md);
200
- }
201
- .sema-formulario legend {
202
- font-weight: 600;
203
- font-size: var(--sema-tamanho-pequeno);
204
- color: var(--sema-cor-texto-secundario);
205
- padding: 0 var(--sema-espacamento-xs);
206
- text-transform: uppercase;
207
- letter-spacing: 0.05em;
208
- }
209
- .sema-campo {
210
- margin-bottom: var(--sema-espacamento-md);
211
- }
212
- .sema-campo label {
213
- display: block;
214
- font-weight: 500;
215
- font-size: var(--sema-tamanho-pequeno);
216
- margin-bottom: var(--sema-espacamento-xs);
217
- color: var(--sema-cor-texto);
218
- }
219
- .sema-obrigatorio {
220
- color: var(--sema-cor-erro);
221
- }
222
- .sema-campo input[type="text"],
223
- .sema-campo input[type="number"],
224
- .sema-campo input[type="email"],
225
- .sema-campo input[type="url"],
226
- .sema-campo input[type="date"],
227
- .sema-campo input[type="datetime-local"],
228
- .sema-campo textarea {
229
- width: 100%;
230
- padding: 0.5rem 0.75rem;
231
- font-family: var(--sema-fonte);
232
- font-size: var(--sema-tamanho-base);
233
- color: var(--sema-cor-texto);
234
- background: var(--sema-cor-fundo);
235
- border: 1px solid var(--sema-cor-borda);
236
- border-radius: var(--sema-raio);
237
- outline: none;
238
- transition: border-color var(--sema-transicao), box-shadow var(--sema-transicao);
239
- }
240
- .sema-campo input:focus,
241
- .sema-campo textarea:focus {
242
- border-color: var(--sema-cor-borda-foco);
243
- box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.15);
244
- }
245
- .sema-campo textarea {
246
- min-height: 5rem;
247
- resize: vertical;
248
- }
249
- .sema-campo-checkbox label {
250
- display: flex;
251
- align-items: center;
252
- gap: var(--sema-espacamento-sm);
253
- cursor: pointer;
254
- }
255
- .sema-campo-checkbox input[type="checkbox"] {
256
- width: 1.125rem;
257
- height: 1.125rem;
258
- accent-color: var(--sema-cor-primaria);
259
- }
260
- /* ========================================
261
- Botoes
262
- ======================================== */
263
- .sema-botao {
264
- display: inline-flex;
265
- align-items: center;
266
- justify-content: center;
267
- padding: 0.625rem 1.25rem;
268
- font-family: var(--sema-fonte);
269
- font-size: var(--sema-tamanho-base);
270
- font-weight: 600;
271
- color: #fff;
272
- background: var(--sema-cor-primaria);
273
- border: none;
274
- border-radius: var(--sema-raio);
275
- cursor: pointer;
276
- transition: background var(--sema-transicao), transform var(--sema-transicao);
277
- }
278
- .sema-botao:hover {
279
- background: var(--sema-cor-primaria-hover);
280
- transform: translateY(-1px);
281
- }
282
- .sema-botao:active {
283
- transform: translateY(0);
284
- }
285
- /* ========================================
286
- Erros
287
- ======================================== */
288
- .sema-erros {
289
- margin-top: var(--sema-espacamento-sm);
290
- }
291
- .sema-erro[hidden] {
292
- display: none;
293
- }
294
- /* ========================================
295
- Saida
296
- ======================================== */
297
- .sema-saida {
298
- margin-top: var(--sema-espacamento-md);
299
- padding: var(--sema-espacamento-md);
300
- background: var(--sema-cor-sucesso-fundo);
301
- border: 1px solid var(--sema-cor-sucesso);
302
- border-radius: var(--sema-raio);
303
- }
304
- .sema-saida[hidden] {
305
- display: none;
306
- }
307
- .sema-saida h4 {
308
- font-size: var(--sema-tamanho-pequeno);
309
- font-weight: 600;
310
- text-transform: uppercase;
311
- letter-spacing: 0.05em;
312
- color: var(--sema-cor-sucesso);
313
- margin-bottom: var(--sema-espacamento-sm);
314
- }
315
- .sema-campo-saida {
316
- padding: var(--sema-espacamento-xs) 0;
317
- font-size: var(--sema-tamanho-pequeno);
318
- }
319
- /* ========================================
320
- Selects (Enums)
321
- ======================================== */
322
- .sema-select {
323
- width: 100%;
324
- padding: 0.5rem 0.75rem;
325
- font-family: var(--sema-fonte);
326
- font-size: var(--sema-tamanho-base);
327
- color: var(--sema-cor-texto);
328
- background: var(--sema-cor-fundo);
329
- border: 1px solid var(--sema-cor-borda);
330
- border-radius: var(--sema-raio);
331
- outline: none;
332
- transition: border-color var(--sema-transicao);
333
- }
334
- .sema-select:focus {
335
- border-color: var(--sema-cor-borda-foco);
336
- box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.15);
337
- }
338
- /* ========================================
339
- States
340
- ======================================== */
341
- .sema-state {
342
- border-left: 3px solid var(--sema-cor-aviso);
343
- }
344
- .sema-transicoes {
345
- list-style: none;
346
- padding: 0;
347
- }
348
- .sema-transicoes li {
349
- padding: var(--sema-espacamento-sm) 0;
350
- border-bottom: 1px solid var(--sema-cor-borda);
351
- font-size: var(--sema-tamanho-pequeno);
352
- }
353
- .sema-transicoes li:last-child {
354
- border-bottom: none;
355
- }
356
- .sema-estado-origem {
357
- font-weight: 600;
358
- color: var(--sema-cor-texto);
359
- }
360
- .sema-estado-destino {
361
- color: var(--sema-cor-primaria);
362
- font-weight: 600;
363
- }
364
- /* ========================================
365
- Flows
366
- ======================================== */
367
- .sema-flow {
368
- border-left: 3px solid var(--sema-cor-info);
369
- }
370
- .sema-etapas {
371
- padding-left: var(--sema-espacamento-lg);
372
- counter-reset: etapa;
373
- }
374
- .sema-etapas li {
375
- padding: var(--sema-espacamento-sm) 0;
376
- font-size: var(--sema-tamanho-pequeno);
377
- }
378
- .sema-etapa strong {
379
- color: var(--sema-cor-primaria);
380
- }
381
- /* ========================================
382
- Routes
383
- ======================================== */
384
- .sema-route {
385
- border-left: 3px solid var(--sema-cor-sucesso);
386
- }
387
- .sema-route-detalhe {
388
- display: flex;
389
- align-items: center;
390
- gap: var(--sema-espacamento-sm);
391
- flex-wrap: wrap;
392
- margin-bottom: var(--sema-espacamento-sm);
393
- }
394
- .sema-route-metodo {
395
- display: inline-block;
396
- padding: 0.125rem 0.5rem;
397
- font-family: var(--sema-fonte-mono);
398
- font-size: var(--sema-tamanho-pequeno);
399
- font-weight: 700;
400
- color: #fff;
401
- background: var(--sema-cor-sucesso);
402
- border-radius: 0.25rem;
403
- text-transform: uppercase;
404
- }
405
- .sema-route-caminho {
406
- font-family: var(--sema-fonte-mono);
407
- font-size: var(--sema-tamanho-pequeno);
408
- color: var(--sema-cor-texto);
409
- }
410
- .sema-route-task {
411
- font-size: var(--sema-tamanho-pequeno);
412
- color: var(--sema-cor-texto-secundario);
413
- }
414
- .sema-route-io {
415
- margin-top: var(--sema-espacamento-sm);
416
- font-size: var(--sema-tamanho-pequeno);
417
- }
418
- .sema-route-io summary {
419
- cursor: pointer;
420
- font-weight: 500;
421
- color: var(--sema-cor-texto-secundario);
422
- }
423
- .sema-route-io ul {
424
- padding-left: var(--sema-espacamento-lg);
425
- margin-top: var(--sema-espacamento-xs);
426
- }
427
- /* ========================================
428
- Animacoes
429
- ======================================== */
430
- @keyframes sema-surgir {
431
- from {
432
- opacity: 0;
433
- transform: translateY(-4px);
434
- }
435
- to {
436
- opacity: 1;
437
- transform: translateY(0);
438
- }
439
- }
440
- /* ========================================
441
- Responsividade
442
- ======================================== */
443
- @media (max-width: 640px) {
444
- .sema-main {
445
- padding: var(--sema-espacamento-md);
446
- }
447
- .sema-header {
448
- padding: var(--sema-espacamento-lg) var(--sema-espacamento-md);
449
- }
450
- .sema-header h1 {
451
- font-size: 1.375rem;
452
- }
453
- .sema-tabela {
454
- display: block;
455
- overflow-x: auto;
456
- }
457
- .sema-route-detalhe {
458
- flex-direction: column;
459
- align-items: flex-start;
460
- }
461
- }
462
- /* ========================================
463
- Estilos especificos do modulo
464
- ======================================== */
465
- ${entidades}
466
- ${tasks}
467
- ${enums}
8
+ const css = `${gerarCabecalhoSemaCss(modulo)}
9
+ /* ========================================
10
+ Design System — Variaveis
11
+ ======================================== */
12
+ :root {
13
+ /* Cores principais */
14
+ --sema-cor-primaria: #6366f1;
15
+ --sema-cor-primaria-hover: #4f46e5;
16
+ --sema-cor-primaria-suave: #eef2ff;
17
+ --sema-cor-sucesso: #10b981;
18
+ --sema-cor-sucesso-fundo: #ecfdf5;
19
+ --sema-cor-erro: #ef4444;
20
+ --sema-cor-erro-texto: #991b1b;
21
+ --sema-cor-erro-fundo: #fef2f2;
22
+ --sema-cor-aviso: #f59e0b;
23
+ --sema-cor-info: #3b82f6;
24
+ /* Neutros */
25
+ --sema-cor-fundo: #fafafa;
26
+ --sema-cor-superficie: #ffffff;
27
+ --sema-cor-texto: #18181b;
28
+ --sema-cor-texto-secundario: #71717a;
29
+ --sema-cor-borda: #e4e4e7;
30
+ --sema-cor-borda-foco: #a5b4fc;
31
+ --sema-cor-entidade: #8b5cf6;
32
+ /* Tipografia */
33
+ --sema-fonte: "Inter", "Segoe UI", system-ui, -apple-system, sans-serif;
34
+ --sema-fonte-mono: "JetBrains Mono", "Fira Code", "Consolas", monospace;
35
+ --sema-tamanho-base: 0.9375rem;
36
+ --sema-tamanho-titulo: 1.75rem;
37
+ --sema-tamanho-subtitulo: 1.25rem;
38
+ --sema-tamanho-pequeno: 0.8125rem;
39
+ /* Espacamento */
40
+ --sema-espacamento-xs: 0.25rem;
41
+ --sema-espacamento-sm: 0.5rem;
42
+ --sema-espacamento-md: 1rem;
43
+ --sema-espacamento-lg: 1.5rem;
44
+ --sema-espacamento-xl: 2rem;
45
+ /* Bordas e sombras */
46
+ --sema-raio: 0.5rem;
47
+ --sema-raio-lg: 0.75rem;
48
+ --sema-sombra: 0 1px 3px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.04);
49
+ --sema-sombra-lg: 0 4px 12px rgba(0, 0, 0, 0.1);
50
+ /* Transicoes */
51
+ --sema-transicao: 150ms ease;
52
+ --sema-transicao-lenta: 300ms ease;
53
+ }
54
+ /* ========================================
55
+ Dark Mode
56
+ ======================================== */
57
+ @media (prefers-color-scheme: dark) {
58
+ :root {
59
+ --sema-cor-primaria: #818cf8;
60
+ --sema-cor-primaria-hover: #a5b4fc;
61
+ --sema-cor-primaria-suave: #1e1b4b;
62
+ --sema-cor-sucesso: #34d399;
63
+ --sema-cor-sucesso-fundo: #064e3b;
64
+ --sema-cor-erro: #f87171;
65
+ --sema-cor-erro-texto: #fecaca;
66
+ --sema-cor-erro-fundo: #450a0a;
67
+ --sema-cor-fundo: #09090b;
68
+ --sema-cor-superficie: #18181b;
69
+ --sema-cor-texto: #fafafa;
70
+ --sema-cor-texto-secundario: #a1a1aa;
71
+ --sema-cor-borda: #3f3f46;
72
+ --sema-cor-borda-foco: #6366f1;
73
+ --sema-cor-entidade: #a78bfa;
74
+ }
75
+ }
76
+ /* ========================================
77
+ Base
78
+ ======================================== */
79
+ *, *::before, *::after {
80
+ box-sizing: border-box;
81
+ margin: 0;
82
+ padding: 0;
83
+ }
84
+ body {
85
+ font-family: var(--sema-fonte);
86
+ font-size: var(--sema-tamanho-base);
87
+ line-height: 1.6;
88
+ color: var(--sema-cor-texto);
89
+ background-color: var(--sema-cor-fundo);
90
+ -webkit-font-smoothing: antialiased;
91
+ }
92
+ /* ========================================
93
+ Layout
94
+ ======================================== */
95
+ .sema-header {
96
+ background: var(--sema-cor-superficie);
97
+ border-bottom: 1px solid var(--sema-cor-borda);
98
+ padding: var(--sema-espacamento-xl) var(--sema-espacamento-lg);
99
+ text-align: center;
100
+ }
101
+ .sema-header h1 {
102
+ font-size: var(--sema-tamanho-titulo);
103
+ font-weight: 700;
104
+ color: var(--sema-cor-primaria);
105
+ letter-spacing: -0.02em;
106
+ }
107
+ .sema-subtitulo {
108
+ color: var(--sema-cor-texto-secundario);
109
+ font-size: var(--sema-tamanho-pequeno);
110
+ margin-top: var(--sema-espacamento-xs);
111
+ }
112
+ .sema-main {
113
+ max-width: 64rem;
114
+ margin: 0 auto;
115
+ padding: var(--sema-espacamento-xl) var(--sema-espacamento-lg);
116
+ display: flex;
117
+ flex-direction: column;
118
+ gap: var(--sema-espacamento-lg);
119
+ }
120
+ .sema-footer {
121
+ text-align: center;
122
+ padding: var(--sema-espacamento-lg);
123
+ color: var(--sema-cor-texto-secundario);
124
+ font-size: var(--sema-tamanho-pequeno);
125
+ border-top: 1px solid var(--sema-cor-borda);
126
+ }
127
+ .sema-footer code {
128
+ font-family: var(--sema-fonte-mono);
129
+ background: var(--sema-cor-primaria-suave);
130
+ padding: 0.125rem 0.375rem;
131
+ border-radius: 0.25rem;
132
+ font-size: 0.8125rem;
133
+ }
134
+ /* ========================================
135
+ Entities
136
+ ======================================== */
137
+ .sema-entity,
138
+ .sema-task,
139
+ .sema-enum,
140
+ .sema-state,
141
+ .sema-flow,
142
+ .sema-route {
143
+ background: var(--sema-cor-superficie);
144
+ border: 1px solid var(--sema-cor-borda);
145
+ border-radius: var(--sema-raio-lg);
146
+ padding: var(--sema-espacamento-lg);
147
+ box-shadow: var(--sema-sombra);
148
+ transition: box-shadow var(--sema-transicao);
149
+ }
150
+ .sema-entity:hover,
151
+ .sema-task:hover,
152
+ .sema-route:hover {
153
+ box-shadow: var(--sema-sombra-lg);
154
+ }
155
+ .sema-entity h3,
156
+ .sema-task h3,
157
+ .sema-enum h3,
158
+ .sema-state h3,
159
+ .sema-flow h3,
160
+ .sema-route h3 {
161
+ font-size: var(--sema-tamanho-subtitulo);
162
+ font-weight: 600;
163
+ margin-bottom: var(--sema-espacamento-md);
164
+ color: var(--sema-cor-texto);
165
+ }
166
+ /* ========================================
167
+ Tabelas de Entity
168
+ ======================================== */
169
+ .sema-tabela {
170
+ width: 100%;
171
+ border-collapse: collapse;
172
+ font-size: var(--sema-tamanho-pequeno);
173
+ }
174
+ .sema-tabela th {
175
+ text-align: left;
176
+ padding: var(--sema-espacamento-sm) var(--sema-espacamento-md);
177
+ background: var(--sema-cor-primaria-suave);
178
+ border-bottom: 2px solid var(--sema-cor-borda);
179
+ font-weight: 600;
180
+ white-space: nowrap;
181
+ }
182
+ .sema-tabela th small {
183
+ color: var(--sema-cor-texto-secundario);
184
+ font-weight: 400;
185
+ margin-left: 0.25rem;
186
+ }
187
+ .sema-tabela td {
188
+ padding: var(--sema-espacamento-sm) var(--sema-espacamento-md);
189
+ border-bottom: 1px solid var(--sema-cor-borda);
190
+ color: var(--sema-cor-texto-secundario);
191
+ }
192
+ /* ========================================
193
+ Formularios de Task
194
+ ======================================== */
195
+ .sema-formulario fieldset {
196
+ border: 1px solid var(--sema-cor-borda);
197
+ border-radius: var(--sema-raio);
198
+ padding: var(--sema-espacamento-md);
199
+ margin-bottom: var(--sema-espacamento-md);
200
+ }
201
+ .sema-formulario legend {
202
+ font-weight: 600;
203
+ font-size: var(--sema-tamanho-pequeno);
204
+ color: var(--sema-cor-texto-secundario);
205
+ padding: 0 var(--sema-espacamento-xs);
206
+ text-transform: uppercase;
207
+ letter-spacing: 0.05em;
208
+ }
209
+ .sema-campo {
210
+ margin-bottom: var(--sema-espacamento-md);
211
+ }
212
+ .sema-campo label {
213
+ display: block;
214
+ font-weight: 500;
215
+ font-size: var(--sema-tamanho-pequeno);
216
+ margin-bottom: var(--sema-espacamento-xs);
217
+ color: var(--sema-cor-texto);
218
+ }
219
+ .sema-obrigatorio {
220
+ color: var(--sema-cor-erro);
221
+ }
222
+ .sema-campo input[type="text"],
223
+ .sema-campo input[type="number"],
224
+ .sema-campo input[type="email"],
225
+ .sema-campo input[type="url"],
226
+ .sema-campo input[type="date"],
227
+ .sema-campo input[type="datetime-local"],
228
+ .sema-campo textarea {
229
+ width: 100%;
230
+ padding: 0.5rem 0.75rem;
231
+ font-family: var(--sema-fonte);
232
+ font-size: var(--sema-tamanho-base);
233
+ color: var(--sema-cor-texto);
234
+ background: var(--sema-cor-fundo);
235
+ border: 1px solid var(--sema-cor-borda);
236
+ border-radius: var(--sema-raio);
237
+ outline: none;
238
+ transition: border-color var(--sema-transicao), box-shadow var(--sema-transicao);
239
+ }
240
+ .sema-campo input:focus,
241
+ .sema-campo textarea:focus {
242
+ border-color: var(--sema-cor-borda-foco);
243
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.15);
244
+ }
245
+ .sema-campo textarea {
246
+ min-height: 5rem;
247
+ resize: vertical;
248
+ }
249
+ .sema-campo-checkbox label {
250
+ display: flex;
251
+ align-items: center;
252
+ gap: var(--sema-espacamento-sm);
253
+ cursor: pointer;
254
+ }
255
+ .sema-campo-checkbox input[type="checkbox"] {
256
+ width: 1.125rem;
257
+ height: 1.125rem;
258
+ accent-color: var(--sema-cor-primaria);
259
+ }
260
+ /* ========================================
261
+ Botoes
262
+ ======================================== */
263
+ .sema-botao {
264
+ display: inline-flex;
265
+ align-items: center;
266
+ justify-content: center;
267
+ padding: 0.625rem 1.25rem;
268
+ font-family: var(--sema-fonte);
269
+ font-size: var(--sema-tamanho-base);
270
+ font-weight: 600;
271
+ color: #fff;
272
+ background: var(--sema-cor-primaria);
273
+ border: none;
274
+ border-radius: var(--sema-raio);
275
+ cursor: pointer;
276
+ transition: background var(--sema-transicao), transform var(--sema-transicao);
277
+ }
278
+ .sema-botao:hover {
279
+ background: var(--sema-cor-primaria-hover);
280
+ transform: translateY(-1px);
281
+ }
282
+ .sema-botao:active {
283
+ transform: translateY(0);
284
+ }
285
+ /* ========================================
286
+ Erros
287
+ ======================================== */
288
+ .sema-erros {
289
+ margin-top: var(--sema-espacamento-sm);
290
+ }
291
+ .sema-erro[hidden] {
292
+ display: none;
293
+ }
294
+ /* ========================================
295
+ Saida
296
+ ======================================== */
297
+ .sema-saida {
298
+ margin-top: var(--sema-espacamento-md);
299
+ padding: var(--sema-espacamento-md);
300
+ background: var(--sema-cor-sucesso-fundo);
301
+ border: 1px solid var(--sema-cor-sucesso);
302
+ border-radius: var(--sema-raio);
303
+ }
304
+ .sema-saida[hidden] {
305
+ display: none;
306
+ }
307
+ .sema-saida h4 {
308
+ font-size: var(--sema-tamanho-pequeno);
309
+ font-weight: 600;
310
+ text-transform: uppercase;
311
+ letter-spacing: 0.05em;
312
+ color: var(--sema-cor-sucesso);
313
+ margin-bottom: var(--sema-espacamento-sm);
314
+ }
315
+ .sema-campo-saida {
316
+ padding: var(--sema-espacamento-xs) 0;
317
+ font-size: var(--sema-tamanho-pequeno);
318
+ }
319
+ /* ========================================
320
+ Selects (Enums)
321
+ ======================================== */
322
+ .sema-select {
323
+ width: 100%;
324
+ padding: 0.5rem 0.75rem;
325
+ font-family: var(--sema-fonte);
326
+ font-size: var(--sema-tamanho-base);
327
+ color: var(--sema-cor-texto);
328
+ background: var(--sema-cor-fundo);
329
+ border: 1px solid var(--sema-cor-borda);
330
+ border-radius: var(--sema-raio);
331
+ outline: none;
332
+ transition: border-color var(--sema-transicao);
333
+ }
334
+ .sema-select:focus {
335
+ border-color: var(--sema-cor-borda-foco);
336
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.15);
337
+ }
338
+ /* ========================================
339
+ States
340
+ ======================================== */
341
+ .sema-state {
342
+ border-left: 3px solid var(--sema-cor-aviso);
343
+ }
344
+ .sema-transicoes {
345
+ list-style: none;
346
+ padding: 0;
347
+ }
348
+ .sema-transicoes li {
349
+ padding: var(--sema-espacamento-sm) 0;
350
+ border-bottom: 1px solid var(--sema-cor-borda);
351
+ font-size: var(--sema-tamanho-pequeno);
352
+ }
353
+ .sema-transicoes li:last-child {
354
+ border-bottom: none;
355
+ }
356
+ .sema-estado-origem {
357
+ font-weight: 600;
358
+ color: var(--sema-cor-texto);
359
+ }
360
+ .sema-estado-destino {
361
+ color: var(--sema-cor-primaria);
362
+ font-weight: 600;
363
+ }
364
+ /* ========================================
365
+ Flows
366
+ ======================================== */
367
+ .sema-flow {
368
+ border-left: 3px solid var(--sema-cor-info);
369
+ }
370
+ .sema-etapas {
371
+ padding-left: var(--sema-espacamento-lg);
372
+ counter-reset: etapa;
373
+ }
374
+ .sema-etapas li {
375
+ padding: var(--sema-espacamento-sm) 0;
376
+ font-size: var(--sema-tamanho-pequeno);
377
+ }
378
+ .sema-etapa strong {
379
+ color: var(--sema-cor-primaria);
380
+ }
381
+ /* ========================================
382
+ Routes
383
+ ======================================== */
384
+ .sema-route {
385
+ border-left: 3px solid var(--sema-cor-sucesso);
386
+ }
387
+ .sema-route-detalhe {
388
+ display: flex;
389
+ align-items: center;
390
+ gap: var(--sema-espacamento-sm);
391
+ flex-wrap: wrap;
392
+ margin-bottom: var(--sema-espacamento-sm);
393
+ }
394
+ .sema-route-metodo {
395
+ display: inline-block;
396
+ padding: 0.125rem 0.5rem;
397
+ font-family: var(--sema-fonte-mono);
398
+ font-size: var(--sema-tamanho-pequeno);
399
+ font-weight: 700;
400
+ color: #fff;
401
+ background: var(--sema-cor-sucesso);
402
+ border-radius: 0.25rem;
403
+ text-transform: uppercase;
404
+ }
405
+ .sema-route-caminho {
406
+ font-family: var(--sema-fonte-mono);
407
+ font-size: var(--sema-tamanho-pequeno);
408
+ color: var(--sema-cor-texto);
409
+ }
410
+ .sema-route-task {
411
+ font-size: var(--sema-tamanho-pequeno);
412
+ color: var(--sema-cor-texto-secundario);
413
+ }
414
+ .sema-route-io {
415
+ margin-top: var(--sema-espacamento-sm);
416
+ font-size: var(--sema-tamanho-pequeno);
417
+ }
418
+ .sema-route-io summary {
419
+ cursor: pointer;
420
+ font-weight: 500;
421
+ color: var(--sema-cor-texto-secundario);
422
+ }
423
+ .sema-route-io ul {
424
+ padding-left: var(--sema-espacamento-lg);
425
+ margin-top: var(--sema-espacamento-xs);
426
+ }
427
+ /* ========================================
428
+ Animacoes
429
+ ======================================== */
430
+ @keyframes sema-surgir {
431
+ from {
432
+ opacity: 0;
433
+ transform: translateY(-4px);
434
+ }
435
+ to {
436
+ opacity: 1;
437
+ transform: translateY(0);
438
+ }
439
+ }
440
+ /* ========================================
441
+ Responsividade
442
+ ======================================== */
443
+ @media (max-width: 640px) {
444
+ .sema-main {
445
+ padding: var(--sema-espacamento-md);
446
+ }
447
+ .sema-header {
448
+ padding: var(--sema-espacamento-lg) var(--sema-espacamento-md);
449
+ }
450
+ .sema-header h1 {
451
+ font-size: 1.375rem;
452
+ }
453
+ .sema-tabela {
454
+ display: block;
455
+ overflow-x: auto;
456
+ }
457
+ .sema-route-detalhe {
458
+ flex-direction: column;
459
+ align-items: flex-start;
460
+ }
461
+ }
462
+ /* ========================================
463
+ Estilos especificos do modulo
464
+ ======================================== */
465
+ ${entidades}
466
+ ${tasks}
467
+ ${enums}
468
468
  `;
469
469
  return [{ caminhoRelativo: `${nomeBase}.css`, conteudo: css }];
470
470
  }