primocode 7.18.0 → 8.0.1

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.
@@ -0,0 +1,565 @@
1
+ /* ==========================================================================
2
+ render.css — aparência do que é criado (cenas, documentos, planilhas).
3
+ Vai junto no export autônomo, então não depende de nada do editor.
4
+ ========================================================================== */
5
+
6
+ .cena, .folha-doc, .planilha {
7
+ --f-display: "Inter", "SF Pro Display", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
8
+ --f-corpo: var(--f-display);
9
+ --f-mono: "SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace;
10
+
11
+ --c-fundo: #0b0d10;
12
+ --c-fundo2: #14181e;
13
+ --c-texto: #eef2f6;
14
+ --c-fraco: #949fac;
15
+ --c-tom: #ff5a36;
16
+ --c-tom2: #ffb03a;
17
+ --c-linha: rgba(255, 255, 255, .12);
18
+ --c-cartao: rgba(255, 255, 255, .05);
19
+ }
20
+
21
+ [data-tema="claro"] {
22
+ --c-fundo: #ffffff; --c-fundo2: #f2f5f8; --c-texto: #0e1318; --c-fraco: #59636f;
23
+ --c-tom: #e04a25; --c-tom2: #1f8fe0; --c-linha: rgba(0, 0, 0, .12); --c-cartao: rgba(0, 0, 0, .035);
24
+ }
25
+ [data-tema="meia-noite"] {
26
+ --c-fundo: #08060f; --c-fundo2: #150f2c; --c-texto: #f3effd; --c-fraco: #a99cd0;
27
+ --c-tom: #a78bfa; --c-tom2: #f472b6; --c-linha: rgba(255, 255, 255, .14); --c-cartao: rgba(255, 255, 255, .055);
28
+ }
29
+ [data-tema="papel"] {
30
+ --f-display: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;
31
+ --f-corpo: var(--f-display);
32
+ --c-fundo: #f9f5ee; --c-fundo2: #efe8db; --c-texto: #221e19; --c-fraco: #6c6055;
33
+ --c-tom: #b4532a; --c-tom2: #3f6f4f; --c-linha: rgba(0, 0, 0, .14); --c-cartao: rgba(0, 0, 0, .04);
34
+ }
35
+ [data-tema="neon"] {
36
+ --c-fundo: #03050a; --c-fundo2: #06121c; --c-texto: #e7fbff; --c-fraco: #79a5b6;
37
+ --c-tom: #22e5ff; --c-tom2: #c3ff3d; --c-linha: rgba(34, 229, 255, .26); --c-cartao: rgba(34, 229, 255, .07);
38
+ }
39
+ [data-tema="brasa"] {
40
+ --c-fundo: #100906; --c-fundo2: #1f0f08; --c-texto: #fdf0e8; --c-fraco: #bf9c8a;
41
+ --c-tom: #ff5a36; --c-tom2: #ffb03a; --c-linha: rgba(255, 140, 90, .2); --c-cartao: rgba(255, 140, 90, .07);
42
+ }
43
+ [data-tema="floresta"] {
44
+ --c-fundo: #06110d; --c-fundo2: #0c2019; --c-texto: #e9f7f0; --c-fraco: #8fb7a6;
45
+ --c-tom: #2fbf7f; --c-tom2: #a3e635; --c-linha: rgba(120, 220, 170, .18); --c-cartao: rgba(120, 220, 170, .06);
46
+ }
47
+ [data-tema="retro"] {
48
+ --f-display: "Futura", "Avenir Next", "Trebuchet MS", system-ui, sans-serif;
49
+ --c-fundo: #f0e2c8; --c-fundo2: #e3cfa8; --c-texto: #2b1d10; --c-fraco: #7a6042;
50
+ --c-tom: #d1541f; --c-tom2: #3f7d6a; --c-linha: rgba(60, 40, 20, .18); --c-cartao: rgba(60, 40, 20, .06);
51
+ }
52
+ [data-tema="oceano"] {
53
+ --c-fundo: #041724; --c-fundo2: #072d42; --c-texto: #e6f6ff; --c-fraco: #86b4cd;
54
+ --c-tom: #38bdf8; --c-tom2: #5eead4; --c-linha: rgba(120, 200, 240, .2); --c-cartao: rgba(120, 200, 240, .07);
55
+ }
56
+ [data-tema="doce"] {
57
+ --c-fundo: #fdf2f6; --c-fundo2: #f7e0ea; --c-texto: #3d1f2e; --c-fraco: #8a6377;
58
+ --c-tom: #e0397a; --c-tom2: #7c5cf0; --c-linha: rgba(120, 50, 90, .16); --c-cartao: rgba(120, 50, 90, .05);
59
+ }
60
+ [data-tema="mono"] {
61
+ --f-display: "Helvetica Neue", Helvetica, Arial, system-ui, sans-serif;
62
+ --c-fundo: #ffffff; --c-fundo2: #eeeeee; --c-texto: #000000; --c-fraco: #666666;
63
+ --c-tom: #000000; --c-tom2: #000000; --c-linha: #000000; --c-cartao: #f2f2f2;
64
+ }
65
+ [data-tema="mono"] .el.no,
66
+ [data-tema="mono"] .el.cartoes .cartao { border-width: 3px; border-radius: 0; }
67
+ [data-tema="mono"] .el.txt { letter-spacing: -.04em; }
68
+
69
+ /* --------------------------------------------------------------- cena ---- */
70
+
71
+ .cena {
72
+ position: relative;
73
+ overflow: hidden;
74
+ background: var(--c-fundo);
75
+ color: var(--c-texto);
76
+ font-family: var(--f-corpo);
77
+ flex: 0 0 auto;
78
+ }
79
+
80
+ .cena[data-fundo="malha"] {
81
+ background:
82
+ radial-gradient(1100px 640px at 10% 4%, color-mix(in srgb, var(--c-tom) 36%, transparent), transparent 62%),
83
+ radial-gradient(920px 560px at 94% 96%, color-mix(in srgb, var(--c-tom2) 30%, transparent), transparent 60%),
84
+ var(--c-fundo);
85
+ }
86
+ .cena[data-fundo="brilho"] {
87
+ background:
88
+ radial-gradient(760px 480px at 50% 112%, color-mix(in srgb, var(--c-tom) 42%, transparent), transparent 68%),
89
+ var(--c-fundo);
90
+ }
91
+ .cena[data-fundo="grade"] {
92
+ background-image:
93
+ linear-gradient(var(--c-linha) 1px, transparent 1px),
94
+ linear-gradient(90deg, var(--c-linha) 1px, transparent 1px);
95
+ background-size: 72px 72px;
96
+ background-color: var(--c-fundo);
97
+ }
98
+ .cena[data-fundo="pontos"] {
99
+ background-image: radial-gradient(var(--c-linha) 1.7px, transparent 1.7px);
100
+ background-size: 38px 38px;
101
+ background-color: var(--c-fundo);
102
+ }
103
+ .cena[data-fundo="suave"] { background: linear-gradient(158deg, var(--c-fundo2), var(--c-fundo) 62%); }
104
+ .cena[data-fundo="vinheta"] {
105
+ background:
106
+ radial-gradient(120% 90% at 50% 40%, transparent 40%, rgba(0, 0, 0, .55) 100%),
107
+ var(--c-fundo);
108
+ }
109
+ .cena[data-fundo="aurora"] {
110
+ background:
111
+ radial-gradient(900px 500px at 20% 0%, color-mix(in srgb, var(--c-tom) 55%, transparent), transparent 55%),
112
+ radial-gradient(760px 620px at 78% 18%, color-mix(in srgb, var(--c-tom2) 45%, transparent), transparent 58%),
113
+ radial-gradient(1000px 520px at 55% 105%, color-mix(in srgb, var(--c-tom) 30%, transparent), transparent 60%),
114
+ var(--c-fundo);
115
+ }
116
+ .cena[data-fundo="raios"] {
117
+ background:
118
+ repeating-conic-gradient(from 210deg at 78% -10%,
119
+ color-mix(in srgb, var(--c-tom) 16%, transparent) 0deg 5deg, transparent 5deg 13deg),
120
+ linear-gradient(160deg, var(--c-fundo2), var(--c-fundo) 70%);
121
+ }
122
+ .cena[data-fundo="ondas"] {
123
+ background:
124
+ repeating-linear-gradient(115deg,
125
+ color-mix(in srgb, var(--c-tom) 9%, transparent) 0 3px, transparent 3px 26px),
126
+ linear-gradient(200deg, var(--c-fundo2), var(--c-fundo) 65%);
127
+ }
128
+ .cena[data-fundo="nevoa"] {
129
+ background:
130
+ radial-gradient(1200px 700px at 30% 110%, color-mix(in srgb, var(--c-fundo2) 90%, white 10%), transparent 60%),
131
+ radial-gradient(900px 500px at 80% -10%, color-mix(in srgb, var(--c-tom) 20%, transparent), transparent 60%),
132
+ var(--c-fundo);
133
+ }
134
+ .cena[data-fundo="xadrez"] {
135
+ background-image:
136
+ linear-gradient(45deg, var(--c-cartao) 25%, transparent 25%, transparent 75%, var(--c-cartao) 75%),
137
+ linear-gradient(45deg, var(--c-cartao) 25%, transparent 25%, transparent 75%, var(--c-cartao) 75%);
138
+ background-size: 120px 120px;
139
+ background-position: 0 0, 60px 60px;
140
+ background-color: var(--c-fundo);
141
+ }
142
+
143
+ .cena .cobertura { position: absolute; inset: 0; z-index: 0; }
144
+
145
+ /* acabamentos — textura por cima de tudo, sem tocar no conteúdo ---------- */
146
+
147
+ .cena::after {
148
+ content: "";
149
+ position: absolute;
150
+ inset: 0;
151
+ z-index: 5;
152
+ pointer-events: none;
153
+ display: none;
154
+ }
155
+ .cena[data-acabamento]::after { display: block; }
156
+
157
+ .cena[data-acabamento="grao"]::after {
158
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='r'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23r)' opacity='.42'/%3E%3C/svg%3E");
159
+ opacity: .22;
160
+ mix-blend-mode: overlay;
161
+ }
162
+ .cena[data-acabamento="vinheta"]::after {
163
+ background: radial-gradient(125% 95% at 50% 45%, transparent 42%, rgba(0, 0, 0, .62) 100%);
164
+ }
165
+ .cena[data-acabamento="scanlines"]::after {
166
+ background: repeating-linear-gradient(rgba(0, 0, 0, .26) 0 2px, transparent 2px 5px);
167
+ opacity: .5;
168
+ }
169
+ .cena[data-acabamento="luz"]::after {
170
+ background: linear-gradient(118deg, transparent 34%,
171
+ color-mix(in srgb, var(--c-tom2) 26%, transparent) 47%, transparent 60%);
172
+ mix-blend-mode: screen;
173
+ }
174
+ .cena[data-acabamento="brilho"]::after {
175
+ background: radial-gradient(60% 45% at 50% 50%,
176
+ color-mix(in srgb, var(--c-tom) 22%, transparent), transparent 72%);
177
+ mix-blend-mode: screen;
178
+ }
179
+ .cena[data-acabamento="moldura"]::after {
180
+ border: 3px solid var(--c-linha);
181
+ inset: 34px;
182
+ border-radius: 4px;
183
+ }
184
+
185
+ /* fluxo — o estúdio posiciona quando a cena usa um layout nomeado -------- */
186
+
187
+ .cena .fluxo {
188
+ position: absolute;
189
+ inset: 0;
190
+ z-index: 1;
191
+ display: flex;
192
+ flex-direction: column;
193
+ justify-content: center;
194
+ gap: 34px;
195
+ }
196
+ .cena .fluxo > .el { flex: 0 0 auto; max-width: 100%; }
197
+
198
+ .cena .fluxo[data-layout="capa"],
199
+ .cena .fluxo[data-layout="centro"],
200
+ .cena .fluxo[data-layout="citacao"] { align-items: center; text-align: center; }
201
+ .cena .fluxo[data-layout="capa"] > .el.txt,
202
+ .cena .fluxo[data-layout="centro"] > .el.txt,
203
+ .cena .fluxo[data-layout="citacao"] > .el { align-items: center; }
204
+ .cena .fluxo[data-layout="capa"] > .el.txt.corpo { max-width: 74%; }
205
+
206
+ .cena .fluxo[data-layout="secao"] { gap: 20px; }
207
+ .cena .fluxo[data-layout="numeros"] { gap: 76px; }
208
+
209
+ .cena .fluxo .colunas { display: grid; gap: 42px; align-items: start; }
210
+ .cena .fluxo .colunas > .el { position: relative; }
211
+
212
+ .cena .fluxo[data-layout="imagem-direita"],
213
+ .cena .fluxo[data-layout="imagem-esquerda"] {
214
+ flex-direction: row;
215
+ display: grid;
216
+ grid-template-columns: 1.05fr 1fr;
217
+ gap: 0;
218
+ }
219
+ .cena .fluxo .lado-texto {
220
+ display: flex; flex-direction: column; justify-content: center; gap: 30px;
221
+ min-width: 0;
222
+ }
223
+ .cena .fluxo .lado-imagem { position: relative; overflow: hidden; }
224
+ .cena .fluxo .lado-imagem .el.imagem { border-radius: 0 !important; }
225
+
226
+ /* elementos ------------------------------------------------------------- */
227
+
228
+ .el { position: absolute; }
229
+ .el.txt {
230
+ display: flex;
231
+ flex-direction: column;
232
+ justify-content: center;
233
+ font-family: var(--f-display);
234
+ letter-spacing: -.022em;
235
+ line-height: 1.12;
236
+ white-space: pre-wrap;
237
+ word-break: break-word;
238
+ }
239
+ .el.txt.corpo { font-family: var(--f-corpo); letter-spacing: -.005em; line-height: 1.5; }
240
+ .el.txt.chapeu {
241
+ font-size: 22px; font-weight: 640; letter-spacing: .17em;
242
+ text-transform: uppercase; color: var(--c-tom); line-height: 1.3;
243
+ }
244
+
245
+ /* estilos de texto — o oposto do "tudo igual" ---------------------------- */
246
+
247
+ .el.txt[data-estilo="gradiente"] {
248
+ background: linear-gradient(96deg, var(--c-tom), var(--c-tom2));
249
+ -webkit-background-clip: text;
250
+ background-clip: text;
251
+ color: transparent;
252
+ }
253
+ .el.txt[data-estilo="contorno"] {
254
+ color: transparent;
255
+ -webkit-text-stroke: 2.5px var(--c-texto);
256
+ }
257
+ .el.txt[data-estilo="contorno-tom"] {
258
+ color: transparent;
259
+ -webkit-text-stroke: 2.5px var(--c-tom);
260
+ }
261
+ .el.txt[data-estilo="sombra"] { text-shadow: 0 18px 40px rgba(0, 0, 0, .55); }
262
+ .el.txt[data-estilo="brilho"] {
263
+ text-shadow: 0 0 28px color-mix(in srgb, var(--c-tom) 85%, transparent),
264
+ 0 0 70px color-mix(in srgb, var(--c-tom) 45%, transparent);
265
+ }
266
+ .el.txt[data-estilo="relevo"] { text-shadow: 5px 5px 0 var(--c-tom); }
267
+ .el.txt[data-estilo="marcador"] .marca,
268
+ .el.txt[data-estilo="marcador"] { display: inline; }
269
+ .el.txt[data-estilo="marcador"] > span.linha {
270
+ background: linear-gradient(transparent 58%, color-mix(in srgb, var(--c-tom) 55%, transparent) 58%);
271
+ box-decoration-break: clone;
272
+ -webkit-box-decoration-break: clone;
273
+ padding: 0 .08em;
274
+ }
275
+ .el.txt[data-estilo="fita"] > span.linha {
276
+ background: var(--c-tom);
277
+ color: #fff;
278
+ box-decoration-break: clone;
279
+ -webkit-box-decoration-break: clone;
280
+ padding: .06em .22em;
281
+ }
282
+ .el.txt[data-estilo="caixa"] {
283
+ border: 3px solid var(--c-tom);
284
+ border-radius: 18px;
285
+ padding: .34em .5em;
286
+ }
287
+
288
+ .el.forma { border-radius: 0; }
289
+ .el.imagem { overflow: hidden; }
290
+ .el.imagem img { width: 100%; height: 100%; display: block; }
291
+
292
+ /* movimento de imagem (Ken Burns) ---------------------------------------- */
293
+
294
+ @keyframes kbAproxima { from { transform: scale(1); } to { transform: scale(1.16); } }
295
+ @keyframes kbAfasta { from { transform: scale(1.16); } to { transform: scale(1); } }
296
+ @keyframes kbEsquerda { from { transform: scale(1.16) translateX(3%); } to { transform: scale(1.16) translateX(-3%); } }
297
+ @keyframes kbDireita { from { transform: scale(1.16) translateX(-3%); } to { transform: scale(1.16) translateX(3%); } }
298
+ @keyframes kbCima { from { transform: scale(1.16) translateY(3%); } to { transform: scale(1.16) translateY(-3%); } }
299
+
300
+ .el.imagem[data-mov] img { animation-duration: 9s; animation-timing-function: linear; animation-fill-mode: both; }
301
+ .el.imagem[data-mov="aproximar"] img { animation-name: kbAproxima; }
302
+ .el.imagem[data-mov="afastar"] img { animation-name: kbAfasta; }
303
+ .el.imagem[data-mov="esquerda"] img { animation-name: kbEsquerda; }
304
+ .el.imagem[data-mov="direita"] img { animation-name: kbDireita; }
305
+ .el.imagem[data-mov="cima"] img { animation-name: kbCima; }
306
+
307
+ .el.lista { display: flex; flex-direction: column; gap: calc(18px * var(--esc, 1)); justify-content: center; }
308
+ .el.lista .item {
309
+ position: relative;
310
+ padding-left: calc(42px * var(--esc, 1));
311
+ font-size: calc(34px * var(--esc, 1));
312
+ line-height: 1.42;
313
+ }
314
+ .el.lista .item::before {
315
+ content: ""; position: absolute; left: 4px; top: .58em;
316
+ width: 12px; height: 12px; border-radius: 4px; background: var(--c-tom);
317
+ }
318
+ .el.lista.numerada .item::before {
319
+ content: counter(li); counter-increment: li;
320
+ width: 30px; height: 30px; left: 0; top: .12em;
321
+ border-radius: 9px; background: var(--c-cartao);
322
+ border: 1px solid var(--c-linha); color: var(--c-tom);
323
+ font-size: 16px; font-weight: 640;
324
+ display: grid; place-items: center;
325
+ }
326
+ .el.lista.numerada { counter-reset: li; }
327
+
328
+ .el.cartoes { display: grid; gap: 24px; align-content: center; }
329
+ .el.cartoes .cartao {
330
+ background: var(--c-cartao);
331
+ border: 1px solid var(--c-linha);
332
+ border-radius: 20px;
333
+ padding: 26px 28px;
334
+ display: grid; gap: 8px; align-content: start;
335
+ }
336
+ .el.cartoes .cartao b { font-family: var(--f-display); font-size: 27px; font-weight: 620; letter-spacing: -.02em; }
337
+ .el.cartoes .cartao span { font-size: 19px; line-height: 1.45; color: var(--c-fraco); }
338
+
339
+ .el.numeros { display: grid; gap: calc(30px * var(--esc, 1)); align-content: center; }
340
+ .el.numeros .num { display: grid; gap: 6px; }
341
+ .el.numeros .num b {
342
+ font-family: var(--f-display);
343
+ font-size: var(--tam-num, calc(84px * var(--esc, 1)));
344
+ font-weight: 680;
345
+ letter-spacing: -.045em; line-height: 1; color: var(--c-tom);
346
+ font-variant-numeric: tabular-nums;
347
+ }
348
+ .el.numeros .num span {
349
+ font-size: calc(20px * var(--esc, 1));
350
+ color: var(--c-fraco); line-height: 1.35;
351
+ }
352
+
353
+ .el.tabela { display: flex; align-items: center; }
354
+ .el.tabela table { width: 100%; border-collapse: collapse; font-size: 22px; }
355
+ .el.tabela th, .el.tabela td { text-align: left; padding: 14px 18px; border-bottom: 1px solid var(--c-linha); }
356
+ .el.tabela th {
357
+ font-size: 15px; text-transform: uppercase; letter-spacing: .1em;
358
+ color: var(--c-fraco); font-weight: 620;
359
+ }
360
+
361
+ .el.codigo {
362
+ background: var(--c-fundo2);
363
+ border: 1px solid var(--c-linha);
364
+ border-radius: 18px;
365
+ padding: 26px 30px;
366
+ font-family: var(--f-mono);
367
+ font-size: 21px;
368
+ line-height: 1.6;
369
+ white-space: pre;
370
+ overflow: hidden;
371
+ display: flex; flex-direction: column; justify-content: center;
372
+ }
373
+
374
+ .el.citacao { display: flex; flex-direction: column; justify-content: center; gap: 26px; }
375
+ .el.citacao .aspas {
376
+ font-family: var(--f-display); font-size: 52px; font-weight: 500;
377
+ line-height: 1.3; letter-spacing: -.02em;
378
+ }
379
+ .el.citacao .autor { font-size: 21px; color: var(--c-fraco); letter-spacing: .04em; }
380
+
381
+ .el.icone { display: grid; place-items: center; }
382
+ .el.icone svg { width: 100%; height: 100%; }
383
+
384
+ .el.no {
385
+ display: grid; place-items: center; text-align: center;
386
+ border-radius: 18px;
387
+ background: var(--c-cartao);
388
+ border: 1.5px solid var(--c-linha);
389
+ font-family: var(--f-display);
390
+ font-size: 30px; font-weight: 580;
391
+ padding: 18px 22px;
392
+ line-height: 1.25;
393
+ }
394
+ .el.no.destaque { background: var(--c-tom); border-color: transparent; color: #fff; }
395
+ .el.no.circulo { border-radius: 999px; }
396
+
397
+ .cena svg.conectores { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; z-index: 1; }
398
+
399
+ /* animação de entrada ----------------------------------------------------- */
400
+
401
+ @keyframes anSubir { from { opacity: 0; transform: translateY(26px); } to { opacity: 1; transform: none; } }
402
+ @keyframes anSurgir { from { opacity: 0; } to { opacity: 1; } }
403
+ @keyframes anEsq { from { opacity: 0; transform: translateX(-36px); } to { opacity: 1; transform: none; } }
404
+ @keyframes anDir { from { opacity: 0; transform: translateX(36px); } to { opacity: 1; transform: none; } }
405
+ @keyframes anZoom { from { opacity: 0; transform: scale(.9); } to { opacity: 1; transform: none; } }
406
+ @keyframes anDesfoque { from { opacity: 0; filter: blur(16px); transform: scale(1.03); } to { opacity: 1; filter: blur(0); transform: none; } }
407
+ @keyframes anCair { from { opacity: 0; transform: translateY(-30px); } to { opacity: 1; transform: none; } }
408
+ @keyframes anGirar { from { opacity: 0; transform: rotate(-7deg) scale(.9); } to { opacity: 1; transform: none; } }
409
+ @keyframes anSaltar {
410
+ 0% { opacity: 0; transform: translateY(46px) scale(.94); }
411
+ 62% { opacity: 1; transform: translateY(-11px) scale(1.02); }
412
+ 100% { opacity: 1; transform: none; }
413
+ }
414
+ @keyframes anRevelar {
415
+ from { opacity: 1; clip-path: inset(0 100% 0 0); }
416
+ to { opacity: 1; clip-path: inset(0 0 0 0); }
417
+ }
418
+ @keyframes anCortina {
419
+ from { opacity: 1; clip-path: inset(100% 0 0 0); }
420
+ to { opacity: 1; clip-path: inset(0 0 0 0); }
421
+ }
422
+ @keyframes anElastico {
423
+ 0% { opacity: 0; transform: scale(.6); }
424
+ 55% { opacity: 1; transform: scale(1.08); }
425
+ 75% { transform: scale(.97); }
426
+ 100% { opacity: 1; transform: none; }
427
+ }
428
+
429
+ .cena.animar .el[data-an] {
430
+ animation-duration: .66s;
431
+ animation-timing-function: cubic-bezier(.22, 1, .36, 1);
432
+ animation-fill-mode: both;
433
+ animation-delay: calc(var(--atraso, 0) * 1s);
434
+ }
435
+ .cena.animar .el[data-an="subir"] { animation-name: anSubir; }
436
+ .cena.animar .el[data-an="surgir"] { animation-name: anSurgir; }
437
+ .cena.animar .el[data-an="esquerda"] { animation-name: anEsq; }
438
+ .cena.animar .el[data-an="direita"] { animation-name: anDir; }
439
+ .cena.animar .el[data-an="zoom"] { animation-name: anZoom; }
440
+ .cena.animar .el[data-an="desfoque"] { animation-name: anDesfoque; }
441
+ .cena.animar .el[data-an="cair"] { animation-name: anCair; }
442
+ .cena.animar .el[data-an="girar"] { animation-name: anGirar; }
443
+ .cena.animar .el[data-an="saltar"] { animation-name: anSaltar; animation-duration: .9s; }
444
+ .cena.animar .el[data-an="revelar"] { animation-name: anRevelar; animation-duration: .85s; }
445
+ .cena.animar .el[data-an="cortina"] { animation-name: anCortina; animation-duration: .85s; }
446
+ .cena.animar .el[data-an="elastico"] { animation-name: anElastico; animation-duration: .95s; }
447
+
448
+ /* palavra a palavra — cada palavra entra sozinha */
449
+ .el.txt .pal { display: inline-block; opacity: 0; }
450
+ .cena.animar .el[data-an="palavra"] { animation: none; opacity: 1; }
451
+ .cena.animar .el[data-an="palavra"] .pal {
452
+ animation: anSubir .58s cubic-bezier(.22, 1, .36, 1) both;
453
+ animation-delay: calc(var(--atraso, 0) * 1s + var(--p, 0) * .085s);
454
+ }
455
+
456
+ /* itens de lista com revelação em cascata */
457
+ .cena.animar .el.lista .item[data-an] {
458
+ animation: anSubir .6s cubic-bezier(.22, 1, .36, 1) both;
459
+ animation-delay: calc(var(--atraso, 0) * 1s);
460
+ }
461
+
462
+ /* transições entre cenas (Corte) ----------------------------------------- */
463
+
464
+ @keyframes trFade { from { opacity: 0; } to { opacity: 1; } }
465
+ @keyframes trDeslizar { from { opacity: 1; transform: translateX(100%); } to { transform: none; } }
466
+ @keyframes trDeslizarCima { from { opacity: 1; transform: translateY(100%); } to { transform: none; } }
467
+ @keyframes trZoom { from { opacity: 0; transform: scale(1.22); } to { opacity: 1; transform: none; } }
468
+ @keyframes trLimpar { from { clip-path: inset(0 100% 0 0); } to { clip-path: inset(0 0 0 0); } }
469
+ @keyframes trPersiana { from { clip-path: inset(0 0 100% 0); } to { clip-path: inset(0 0 0 0); } }
470
+ @keyframes trFlash {
471
+ 0% { opacity: 0; filter: brightness(6); }
472
+ 22% { opacity: 1; filter: brightness(3); }
473
+ 100% { opacity: 1; filter: brightness(1); }
474
+ }
475
+
476
+ .cena[data-transicao] { animation-duration: .62s; animation-timing-function: cubic-bezier(.22, 1, .36, 1); animation-fill-mode: both; }
477
+ .cena[data-transicao="fade"] { animation-name: trFade; }
478
+ .cena[data-transicao="deslizar"] { animation-name: trDeslizar; }
479
+ .cena[data-transicao="subir"] { animation-name: trDeslizarCima; }
480
+ .cena[data-transicao="zoom"] { animation-name: trZoom; }
481
+ .cena[data-transicao="limpar"] { animation-name: trLimpar; }
482
+ .cena[data-transicao="persiana"] { animation-name: trPersiana; }
483
+ .cena[data-transicao="flash"] { animation-name: trFlash; animation-duration: .5s; }
484
+ .cena[data-transicao="corte"] { animation: none; }
485
+
486
+ /* ---------------------------------------------------------- documento ---- */
487
+
488
+ .folha-doc {
489
+ width: 794px;
490
+ min-height: 1123px;
491
+ background: var(--c-fundo);
492
+ color: var(--c-texto);
493
+ font-family: var(--f-corpo);
494
+ padding: 84px 88px;
495
+ font-size: 15.5px;
496
+ line-height: 1.72;
497
+ }
498
+ .folha-doc > * { margin: 0 0 18px; }
499
+ .folha-doc h1 { font-family: var(--f-display); font-size: 38px; line-height: 1.15; letter-spacing: -.03em; margin: 0 0 8px; font-weight: 660; }
500
+ .folha-doc h2 { font-family: var(--f-display); font-size: 24px; line-height: 1.25; letter-spacing: -.02em; margin: 34px 0 12px; font-weight: 620; }
501
+ .folha-doc h3 { font-family: var(--f-display); font-size: 18px; margin: 24px 0 8px; font-weight: 620; }
502
+ .folha-doc .chapeu-doc { color: var(--c-tom); font-size: 12px; font-weight: 640; letter-spacing: .16em; text-transform: uppercase; margin-bottom: 10px; }
503
+ .folha-doc .apoio { font-size: 18px; color: var(--c-fraco); line-height: 1.6; }
504
+ .folha-doc ul, .folha-doc ol { padding-left: 22px; }
505
+ .folha-doc li { margin-bottom: 7px; }
506
+ .folha-doc blockquote {
507
+ margin: 22px 0; padding: 4px 0 4px 22px;
508
+ border-left: 3px solid var(--c-tom); color: var(--c-fraco); font-size: 17px;
509
+ }
510
+ .folha-doc table { width: 100%; border-collapse: collapse; font-size: 14px; margin: 20px 0; }
511
+ .folha-doc th, .folha-doc td { text-align: left; padding: 10px 12px; border-bottom: 1px solid var(--c-linha); }
512
+ .folha-doc th { font-size: 11.5px; text-transform: uppercase; letter-spacing: .09em; color: var(--c-fraco); }
513
+ .folha-doc pre {
514
+ background: var(--c-fundo2); border: 1px solid var(--c-linha); border-radius: 10px;
515
+ padding: 16px 18px; font-family: var(--f-mono); font-size: 13px; line-height: 1.6; overflow-x: auto;
516
+ }
517
+ .folha-doc code { font-family: var(--f-mono); font-size: .88em; background: var(--c-cartao); padding: 1px 6px; border-radius: 5px; }
518
+ .folha-doc hr { border: 0; border-top: 1px solid var(--c-linha); margin: 28px 0; }
519
+ .folha-doc figure { margin: 24px 0; }
520
+ .folha-doc figure img { width: 100%; border-radius: 10px; display: block; }
521
+ .folha-doc figcaption { font-size: 12.5px; color: var(--c-fraco); margin-top: 8px; }
522
+
523
+ /* ---------------------------------------------------------- planilha ----- */
524
+
525
+ .planilha { background: var(--c-fundo); color: var(--c-texto); font-family: var(--f-corpo); }
526
+ .planilha table { border-collapse: collapse; font-size: 13px; width: 100%; }
527
+ .planilha th, .planilha td {
528
+ border: 1px solid var(--c-linha);
529
+ padding: 8px 11px;
530
+ text-align: left;
531
+ min-width: 96px;
532
+ white-space: nowrap;
533
+ }
534
+ .planilha thead th {
535
+ background: var(--c-fundo2);
536
+ font-size: 11px; text-transform: uppercase; letter-spacing: .08em;
537
+ color: var(--c-fraco); font-weight: 620;
538
+ position: sticky; top: 0; z-index: 2;
539
+ }
540
+ .planilha tbody th {
541
+ background: var(--c-fundo2); color: var(--c-fraco);
542
+ font-weight: 500; font-size: 11px; text-align: center; min-width: 42px;
543
+ position: sticky; left: 0; z-index: 1;
544
+ }
545
+ .planilha td.num { text-align: right; font-variant-numeric: tabular-nums; }
546
+ .planilha td.total { font-weight: 680; color: var(--c-tom); }
547
+ .planilha td.alto { background: color-mix(in srgb, #2fbf7f 20%, transparent); }
548
+ .planilha td.baixo { background: color-mix(in srgb, #ff5a36 20%, transparent); }
549
+ .planilha td.sel { outline: 2px solid var(--c-tom); outline-offset: -2px; }
550
+ .planilha td[contenteditable]:focus { outline: 2px solid var(--c-tom); outline-offset: -2px; }
551
+
552
+ /* ------------------------------------------------------------ impressão -- */
553
+
554
+ @media print {
555
+ body { background: #fff; overflow: visible; }
556
+ .topo, .trilho, .painel, .inspetor, .palco-barra, .tempo, .aviso { display: none !important; }
557
+ .palco-wrap { padding: 0; display: block; overflow: visible; }
558
+ .palco { box-shadow: none; border-radius: 0; }
559
+ .cena {
560
+ page-break-after: always; break-after: page;
561
+ -webkit-print-color-adjust: exact; print-color-adjust: exact;
562
+ }
563
+ .cena .el { animation: none !important; opacity: 1 !important; }
564
+ .folha-doc { padding: 0; width: auto; min-height: 0; }
565
+ }
@@ -0,0 +1,70 @@
1
+ <!doctype html>
2
+ <html lang="pt-BR">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <title>Editor · PrimoCode Studio</title>
7
+ <link rel="stylesheet" href="/core.css">
8
+ <link rel="stylesheet" href="/render.css">
9
+ </head>
10
+ <body>
11
+
12
+ <header class="topo">
13
+ <a class="marca" href="/"><span class="cubo">P</span>PrimoCode <em id="marca-ferr">Studio</em></a>
14
+ <div class="divisor"></div>
15
+ <input class="titulo-arq" id="titulo" placeholder="Sem título">
16
+ <div id="topo-extra" style="display:flex;gap:8px"></div>
17
+ <div class="cresce"></div>
18
+ <div class="estado" id="estado">—</div>
19
+ <div class="divisor"></div>
20
+ <button class="btn vazio" id="btn-codigo" title="Ver e editar o documento em JSON">Código</button>
21
+ <button class="btn vazio so-icone" id="btn-pdf" title="Imprimir / PDF"></button>
22
+ <a class="btn vazio so-icone" id="btn-baixar" title="Baixar HTML autônomo"></a>
23
+ <a class="btn primo" id="btn-ver" target="_blank">Abrir</a>
24
+ </header>
25
+
26
+ <main class="editor">
27
+ <nav class="trilho" id="trilho"></nav>
28
+
29
+ <aside class="painel">
30
+ <div class="painel-topo">
31
+ <span class="rotulo" id="painel-rotulo">Cenas</span>
32
+ </div>
33
+ <div class="painel-lista" id="painel-lista"></div>
34
+ </aside>
35
+
36
+ <section class="area-palco">
37
+ <div class="palco-wrap" id="palco-wrap"></div>
38
+ <div class="tempo" id="tempo" style="display:none"></div>
39
+ <div class="palco-barra" id="palco-barra"></div>
40
+ </section>
41
+
42
+ <aside class="inspetor" id="inspetor"></aside>
43
+ </main>
44
+
45
+ <div class="folha" id="folha">
46
+ <div class="caixa">
47
+ <h3>Documento em JSON</h3>
48
+ <p style="color:var(--fraco);font-size:12.5px;margin:0 0 12px">
49
+ É exatamente isto que a IA envia para a API. Edite e aplique.
50
+ </p>
51
+ <textarea id="codigo-txt" spellcheck="false"></textarea>
52
+ <div class="rodape">
53
+ <button class="btn" id="codigo-fechar">Fechar</button>
54
+ <button class="btn primo" id="codigo-aplicar">Aplicar</button>
55
+ </div>
56
+ </div>
57
+ </div>
58
+
59
+ <script src="/js/icones.js"></script>
60
+ <script src="/js/ferramentas.js"></script>
61
+ <script src="/js/render.js"></script>
62
+ <script src="/js/render-prosa.js"></script>
63
+ <script src="/js/render-grade.js"></script>
64
+ <script>
65
+ document.getElementById("btn-pdf").innerHTML = svgIcone("tela");
66
+ document.getElementById("btn-baixar").innerHTML = svgIcone("baixar");
67
+ </script>
68
+ <script src="/js/editor.js"></script>
69
+ </body>
70
+ </html>
@@ -0,0 +1,20 @@
1
+ <!doctype html>
2
+ <html lang="pt-BR">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <title>PrimoCode</title>
7
+ <link rel="stylesheet" href="/core.css">
8
+ <link rel="stylesheet" href="/render.css">
9
+ </head>
10
+ <body class="modo-ver">
11
+
12
+ <div id="palco" class="palco"></div>
13
+
14
+ <script src="/js/icones.js"></script>
15
+ <script src="/js/render.js"></script>
16
+ <script src="/js/render-prosa.js"></script>
17
+ <script src="/js/render-grade.js"></script>
18
+ <script src="/js/player.js"></script>
19
+ </body>
20
+ </html>