primocode 8.42.2 → 9.0.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/README.md +41 -37
- package/bin/primocode.js +598 -360
- package/lib/acervo.js +8 -1
- package/lib/act.js +205 -114
- package/lib/api.js +35 -4
- package/lib/boas-vindas.js +31 -192
- package/lib/catalogo.js +60 -60
- package/lib/config.js +1 -1
- package/lib/conta.js +3 -24
- package/lib/diff.js +161 -0
- package/lib/diretor.js +37 -47
- package/lib/entrada.js +545 -0
- package/lib/especialistas.js +2 -2
- package/lib/estudio/assets.js +343 -0
- package/lib/estudio/identidade.js +560 -0
- package/lib/estudio/index.js +565 -0
- package/lib/estudio/plano.js +327 -0
- package/lib/estudio/projeto.js +246 -0
- package/lib/estudio/remotion.js +606 -0
- package/lib/estudio/slides.js +190 -0
- package/lib/estudio/video.js +296 -0
- package/lib/fala.js +13 -1
- package/lib/marca.js +4 -1
- package/lib/marketplace.js +189 -0
- package/lib/permissao.js +137 -0
- package/lib/registro.js +229 -0
- package/lib/skills.js +329 -0
- package/lib/tools.js +51 -181
- package/lib/ui.js +7 -3
- package/lib/voz.js +239 -0
- package/package.json +12 -3
- package/skills/acessibilidade/SKILL.md +28 -0
- package/skills/api-que-nao-quebra/SKILL.md +27 -0
- package/skills/depurar-de-verdade/SKILL.md +29 -0
- package/skills/editar-meu-video/SKILL.md +59 -0
- package/skills/escrever-em-portugues/SKILL.md +28 -0
- package/skills/git-limpo/SKILL.md +28 -0
- package/skills/motion-de-primeira/SKILL.md +62 -0
- package/skills/pagina-que-converte/SKILL.md +28 -0
- package/skills/performance-web/SKILL.md +28 -0
- package/skills/revisao-antes-de-entregar/SKILL.md +27 -0
- package/skills/slides-que-prendem/SKILL.md +40 -0
- package/studio/edge.py +16 -66
- package/studio/narrar.py +274 -0
- package/studio/pessoa.py +167 -0
- package/voz/primo_voz/__init__.py +0 -0
- package/voz/primo_voz/__main__.py +325 -0
- package/voz/primo_voz/escuta.py +235 -0
- package/voz/primo_voz/orbe.py +216 -0
- package/lib/audio-livre.js +0 -177
- package/lib/chaves.js +0 -149
- package/lib/claude-engine.js +0 -631
- package/lib/codex-engine.js +0 -208
- package/lib/remotion.js +0 -663
- package/lib/studio.js +0 -960
- package/studio/PRIMOCODE.md +0 -58
- package/studio/README.md +0 -154
- package/studio/__pycache__/edge.cpython-311.pyc +0 -0
- package/studio/__pycache__/elevenlabs.cpython-311.pyc +0 -0
- package/studio/__pycache__/voz.cpython-311.pyc +0 -0
- package/studio/arquivos/corte-teste-de-camera-fb823.json +0 -57
- package/studio/ferramentas/00-protocolo.md +0 -125
- package/studio/ferramentas/01-modelos.md +0 -270
- package/studio/ferramentas/README.md +0 -32
- package/studio/ferramentas/corte.md +0 -919
- package/studio/ferramentas/grade.md +0 -92
- package/studio/ferramentas/prisma.md +0 -107
- package/studio/ferramentas/prosa.md +0 -86
- package/studio/ferramentas/tela.md +0 -93
- package/studio/ferramentas/traco.md +0 -79
- package/studio/server.py +0 -2254
- package/studio/studio.log +0 -57
- package/studio/voz.py +0 -388
- package/studio/web/analise.html +0 -52
- package/studio/web/core.css +0 -1167
- package/studio/web/fontes/bebas.woff2 +0 -0
- package/studio/web/fontes/grotesk-700.woff2 +0 -0
- package/studio/web/fontes/inter-400.woff2 +0 -0
- package/studio/web/fontes/inter-700.woff2 +0 -0
- package/studio/web/fontes/jetbrains-400.woff2 +0 -0
- package/studio/web/fontes/playfair-700.woff2 +0 -0
- package/studio/web/fontes.css +0 -23
- package/studio/web/home.html +0 -217
- package/studio/web/js/analise.js +0 -510
- package/studio/web/js/audio.js +0 -607
- package/studio/web/js/editor.js +0 -1802
- package/studio/web/js/exportar.js +0 -222
- package/studio/web/js/ferramentas.js +0 -108
- package/studio/web/js/icones.js +0 -120
- package/studio/web/js/midia.js +0 -157
- package/studio/web/js/narracao.js +0 -325
- package/studio/web/js/player.js +0 -903
- package/studio/web/js/render-grade.js +0 -243
- package/studio/web/js/render-prosa.js +0 -104
- package/studio/web/js/render.js +0 -1852
- package/studio/web/js/sfx.js +0 -233
- package/studio/web/js/video.js +0 -464
- package/studio/web/js/voz-neural.js +0 -152
- package/studio/web/render.css +0 -1352
- package/studio/web/tf.html +0 -15
- package/studio/web/tool.html +0 -78
- package/studio/web/view.html +0 -27
package/studio/web/render.css
DELETED
|
@@ -1,1352 +0,0 @@
|
|
|
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
|
-
/* "Primo *" são as fontes embutidas em fontes.css — existem sempre, em
|
|
8
|
-
qualquer máquina e no export offline. O resto da pilha é rede de
|
|
9
|
-
segurança para o caso de o CSS das fontes não ter sido carregado. */
|
|
10
|
-
--f-display: "Primo Sans", "Inter", "SF Pro Display", -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
|
|
11
|
-
--f-corpo: var(--f-display);
|
|
12
|
-
--f-mono: "Primo Mono", "SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace;
|
|
13
|
-
|
|
14
|
-
--c-fundo: #0b0d10;
|
|
15
|
-
--c-fundo2: #14181e;
|
|
16
|
-
--c-texto: #eef2f6;
|
|
17
|
-
--c-fraco: #949fac;
|
|
18
|
-
--c-tom: #ff5a36;
|
|
19
|
-
--c-tom2: #ffb03a;
|
|
20
|
-
--c-linha: rgba(255, 255, 255, .12);
|
|
21
|
-
--c-cartao: rgba(255, 255, 255, .05);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
[data-tema="claro"] {
|
|
25
|
-
--c-fundo: #ffffff; --c-fundo2: #f2f5f8; --c-texto: #0e1318; --c-fraco: #59636f;
|
|
26
|
-
--c-tom: #e04a25; --c-tom2: #1f8fe0; --c-linha: rgba(0, 0, 0, .12); --c-cartao: rgba(0, 0, 0, .035);
|
|
27
|
-
}
|
|
28
|
-
[data-tema="meia-noite"] {
|
|
29
|
-
--c-fundo: #08060f; --c-fundo2: #150f2c; --c-texto: #f3effd; --c-fraco: #a99cd0;
|
|
30
|
-
--c-tom: #a78bfa; --c-tom2: #f472b6; --c-linha: rgba(255, 255, 255, .14); --c-cartao: rgba(255, 255, 255, .055);
|
|
31
|
-
}
|
|
32
|
-
[data-tema="papel"] {
|
|
33
|
-
--f-display: "Primo Serif", "Iowan Old Style", Palatino, Georgia, serif;
|
|
34
|
-
--f-corpo: "Primo Sans", "Inter", system-ui, sans-serif;
|
|
35
|
-
--c-fundo: #f9f5ee; --c-fundo2: #efe8db; --c-texto: #221e19; --c-fraco: #6c6055;
|
|
36
|
-
--c-tom: #b4532a; --c-tom2: #3f6f4f; --c-linha: rgba(0, 0, 0, .14); --c-cartao: rgba(0, 0, 0, .04);
|
|
37
|
-
}
|
|
38
|
-
[data-tema="neon"] {
|
|
39
|
-
--c-fundo: #03050a; --c-fundo2: #06121c; --c-texto: #e7fbff; --c-fraco: #79a5b6;
|
|
40
|
-
--c-tom: #22e5ff; --c-tom2: #c3ff3d; --c-linha: rgba(34, 229, 255, .26); --c-cartao: rgba(34, 229, 255, .07);
|
|
41
|
-
}
|
|
42
|
-
[data-tema="brasa"] {
|
|
43
|
-
--c-fundo: #100906; --c-fundo2: #1f0f08; --c-texto: #fdf0e8; --c-fraco: #bf9c8a;
|
|
44
|
-
--c-tom: #ff5a36; --c-tom2: #ffb03a; --c-linha: rgba(255, 140, 90, .2); --c-cartao: rgba(255, 140, 90, .07);
|
|
45
|
-
}
|
|
46
|
-
[data-tema="floresta"] {
|
|
47
|
-
--c-fundo: #06110d; --c-fundo2: #0c2019; --c-texto: #e9f7f0; --c-fraco: #8fb7a6;
|
|
48
|
-
--c-tom: #2fbf7f; --c-tom2: #a3e635; --c-linha: rgba(120, 220, 170, .18); --c-cartao: rgba(120, 220, 170, .06);
|
|
49
|
-
}
|
|
50
|
-
[data-tema="retro"] {
|
|
51
|
-
--f-display: "Primo Display", "Futura", "Avenir Next", system-ui, sans-serif;
|
|
52
|
-
--c-fundo: #f0e2c8; --c-fundo2: #e3cfa8; --c-texto: #2b1d10; --c-fraco: #7a6042;
|
|
53
|
-
--c-tom: #d1541f; --c-tom2: #3f7d6a; --c-linha: rgba(60, 40, 20, .18); --c-cartao: rgba(60, 40, 20, .06);
|
|
54
|
-
}
|
|
55
|
-
[data-tema="oceano"] {
|
|
56
|
-
--c-fundo: #041724; --c-fundo2: #072d42; --c-texto: #e6f6ff; --c-fraco: #86b4cd;
|
|
57
|
-
--c-tom: #38bdf8; --c-tom2: #5eead4; --c-linha: rgba(120, 200, 240, .2); --c-cartao: rgba(120, 200, 240, .07);
|
|
58
|
-
}
|
|
59
|
-
[data-tema="doce"] {
|
|
60
|
-
--c-fundo: #fdf2f6; --c-fundo2: #f7e0ea; --c-texto: #3d1f2e; --c-fraco: #8a6377;
|
|
61
|
-
--c-tom: #e0397a; --c-tom2: #7c5cf0; --c-linha: rgba(120, 50, 90, .16); --c-cartao: rgba(120, 50, 90, .05);
|
|
62
|
-
}
|
|
63
|
-
[data-tema="mono"] {
|
|
64
|
-
--f-display: "Primo Geo", "Helvetica Neue", Helvetica, Arial, system-ui, sans-serif;
|
|
65
|
-
--c-fundo: #ffffff; --c-fundo2: #eeeeee; --c-texto: #000000; --c-fraco: #666666;
|
|
66
|
-
--c-tom: #000000; --c-tom2: #000000; --c-linha: #000000; --c-cartao: #f2f2f2;
|
|
67
|
-
}
|
|
68
|
-
/* "âmbar" — o marrom quente com dourado, que é a cara de curso e de aula.
|
|
69
|
-
Entrou porque faltava: os dez temas tinham roxo, ciano, laranja de fogo e
|
|
70
|
-
verde, e nenhum tom terroso onde o texto branco descansa. É o tema que
|
|
71
|
-
sustenta cena longa sem cansar a vista. */
|
|
72
|
-
[data-tema="ambar"] {
|
|
73
|
-
--f-display: "Primo Geo", "Space Grotesk", system-ui, sans-serif;
|
|
74
|
-
--c-fundo: #1a100b; --c-fundo2: #2a1710; --c-texto: #f7efe8; --c-fraco: #b8a08f;
|
|
75
|
-
--c-tom: #e8a33d; --c-tom2: #d0703a; --c-linha: rgba(232, 163, 61, .22); --c-cartao: rgba(232, 163, 61, .07);
|
|
76
|
-
}
|
|
77
|
-
/* "grafite" — o cinza-azulado sóbrio, para conteúdo técnico e relatório.
|
|
78
|
-
Sem cor de festa: quando o assunto é número, a cor não pode competir. */
|
|
79
|
-
[data-tema="grafite"] {
|
|
80
|
-
--f-display: "Primo Geo", "Space Grotesk", system-ui, sans-serif;
|
|
81
|
-
--c-fundo: #0d1117; --c-fundo2: #161d26; --c-texto: #e6edf3; --c-fraco: #8b97a6;
|
|
82
|
-
--c-tom: #4a9eff; --c-tom2: #7ee0c0; --c-linha: rgba(255, 255, 255, .1); --c-cartao: rgba(255, 255, 255, .04);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
[data-tema="mono"] .el.no,
|
|
86
|
-
[data-tema="mono"] .el.cartoes .cartao { border-width: 3px; border-radius: 0; }
|
|
87
|
-
[data-tema="mono"] .el.txt { letter-spacing: -.04em; }
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
/* Cada tema com a SUA letra. Antes só três trocavam de fonte, e os outros
|
|
91
|
-
sete herdavam a mesma sans — o que dava a todo vídeo a mesma cara. */
|
|
92
|
-
[data-tema="meia-noite"] { --f-display: "Primo Geo", "Space Grotesk", system-ui, sans-serif; }
|
|
93
|
-
[data-tema="brasa"] { --f-display: "Primo Display", "Bebas Neue", Impact, system-ui, sans-serif; letter-spacing: .01em; }
|
|
94
|
-
[data-tema="neon"] { --f-display: "Primo Geo", "Space Grotesk", system-ui, sans-serif; }
|
|
95
|
-
[data-tema="oceano"] { --f-display: "Primo Geo", "Space Grotesk", system-ui, sans-serif; }
|
|
96
|
-
[data-tema="floresta"] { --f-display: "Primo Serif", Georgia, serif; --f-corpo: "Primo Sans", system-ui, sans-serif; }
|
|
97
|
-
[data-tema="doce"] { --f-display: "Primo Serif", Georgia, serif; --f-corpo: "Primo Sans", system-ui, sans-serif; }
|
|
98
|
-
|
|
99
|
-
/* Título de cena de vídeo pede peso e aperto — é o que dá cara de cinema em
|
|
100
|
-
vez de cara de slide de reunião. */
|
|
101
|
-
.cena .el.txt.titulo { font-weight: 700; letter-spacing: -.025em; }
|
|
102
|
-
[data-tema="brasa"] .cena .el.txt.titulo,
|
|
103
|
-
[data-tema="retro"] .cena .el.txt.titulo { font-weight: 400; letter-spacing: .02em; }
|
|
104
|
-
|
|
105
|
-
/* --------------------------------------------------------------- cena ---- */
|
|
106
|
-
|
|
107
|
-
.cena {
|
|
108
|
-
position: relative;
|
|
109
|
-
overflow: hidden;
|
|
110
|
-
background: var(--c-fundo);
|
|
111
|
-
color: var(--c-texto);
|
|
112
|
-
font-family: var(--f-corpo);
|
|
113
|
-
flex: 0 0 auto;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
.cena[data-fundo="malha"] {
|
|
117
|
-
background:
|
|
118
|
-
radial-gradient(1100px 640px at 10% 4%, color-mix(in srgb, var(--c-tom) 36%, transparent), transparent 62%),
|
|
119
|
-
radial-gradient(920px 560px at 94% 96%, color-mix(in srgb, var(--c-tom2) 30%, transparent), transparent 60%),
|
|
120
|
-
var(--c-fundo);
|
|
121
|
-
}
|
|
122
|
-
.cena[data-fundo="brilho"] {
|
|
123
|
-
background:
|
|
124
|
-
radial-gradient(760px 480px at 50% 112%, color-mix(in srgb, var(--c-tom) 42%, transparent), transparent 68%),
|
|
125
|
-
var(--c-fundo);
|
|
126
|
-
}
|
|
127
|
-
.cena[data-fundo="grade"] {
|
|
128
|
-
background-image:
|
|
129
|
-
linear-gradient(var(--c-linha) 1px, transparent 1px),
|
|
130
|
-
linear-gradient(90deg, var(--c-linha) 1px, transparent 1px);
|
|
131
|
-
background-size: 72px 72px;
|
|
132
|
-
background-color: var(--c-fundo);
|
|
133
|
-
}
|
|
134
|
-
.cena[data-fundo="pontos"] {
|
|
135
|
-
background-image: radial-gradient(var(--c-linha) 1.7px, transparent 1.7px);
|
|
136
|
-
background-size: 38px 38px;
|
|
137
|
-
background-color: var(--c-fundo);
|
|
138
|
-
}
|
|
139
|
-
.cena[data-fundo="suave"] { background: linear-gradient(158deg, var(--c-fundo2), var(--c-fundo) 62%); }
|
|
140
|
-
.cena[data-fundo="vinheta"] {
|
|
141
|
-
background:
|
|
142
|
-
radial-gradient(120% 90% at 50% 40%, transparent 40%, rgba(0, 0, 0, .55) 100%),
|
|
143
|
-
var(--c-fundo);
|
|
144
|
-
}
|
|
145
|
-
.cena[data-fundo="aurora"] {
|
|
146
|
-
background:
|
|
147
|
-
radial-gradient(900px 500px at 20% 0%, color-mix(in srgb, var(--c-tom) 55%, transparent), transparent 55%),
|
|
148
|
-
radial-gradient(760px 620px at 78% 18%, color-mix(in srgb, var(--c-tom2) 45%, transparent), transparent 58%),
|
|
149
|
-
radial-gradient(1000px 520px at 55% 105%, color-mix(in srgb, var(--c-tom) 30%, transparent), transparent 60%),
|
|
150
|
-
var(--c-fundo);
|
|
151
|
-
}
|
|
152
|
-
.cena[data-fundo="raios"] {
|
|
153
|
-
background:
|
|
154
|
-
repeating-conic-gradient(from 210deg at 78% -10%,
|
|
155
|
-
color-mix(in srgb, var(--c-tom) 16%, transparent) 0deg 5deg, transparent 5deg 13deg),
|
|
156
|
-
linear-gradient(160deg, var(--c-fundo2), var(--c-fundo) 70%);
|
|
157
|
-
}
|
|
158
|
-
.cena[data-fundo="ondas"] {
|
|
159
|
-
background:
|
|
160
|
-
repeating-linear-gradient(115deg,
|
|
161
|
-
color-mix(in srgb, var(--c-tom) 9%, transparent) 0 3px, transparent 3px 26px),
|
|
162
|
-
linear-gradient(200deg, var(--c-fundo2), var(--c-fundo) 65%);
|
|
163
|
-
}
|
|
164
|
-
.cena[data-fundo="nevoa"] {
|
|
165
|
-
background:
|
|
166
|
-
radial-gradient(1200px 700px at 30% 110%, color-mix(in srgb, var(--c-fundo2) 90%, white 10%), transparent 60%),
|
|
167
|
-
radial-gradient(900px 500px at 80% -10%, color-mix(in srgb, var(--c-tom) 20%, transparent), transparent 60%),
|
|
168
|
-
var(--c-fundo);
|
|
169
|
-
}
|
|
170
|
-
.cena[data-fundo="xadrez"] {
|
|
171
|
-
background-image:
|
|
172
|
-
linear-gradient(45deg, var(--c-cartao) 25%, transparent 25%, transparent 75%, var(--c-cartao) 75%),
|
|
173
|
-
linear-gradient(45deg, var(--c-cartao) 25%, transparent 25%, transparent 75%, var(--c-cartao) 75%);
|
|
174
|
-
background-size: 120px 120px;
|
|
175
|
-
background-position: 0 0, 60px 60px;
|
|
176
|
-
background-color: var(--c-fundo);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
.cena .cobertura { position: absolute; inset: 0; z-index: 0; }
|
|
180
|
-
|
|
181
|
-
/* acabamentos — textura por cima de tudo, sem tocar no conteúdo ---------- */
|
|
182
|
-
|
|
183
|
-
.cena::after {
|
|
184
|
-
content: "";
|
|
185
|
-
position: absolute;
|
|
186
|
-
inset: 0;
|
|
187
|
-
z-index: 5;
|
|
188
|
-
pointer-events: none;
|
|
189
|
-
display: none;
|
|
190
|
-
}
|
|
191
|
-
.cena[data-acabamento]::after { display: block; }
|
|
192
|
-
|
|
193
|
-
.cena[data-acabamento="grao"]::after {
|
|
194
|
-
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");
|
|
195
|
-
opacity: .22;
|
|
196
|
-
mix-blend-mode: overlay;
|
|
197
|
-
}
|
|
198
|
-
.cena[data-acabamento="vinheta"]::after {
|
|
199
|
-
background: radial-gradient(125% 95% at 50% 45%, transparent 42%, rgba(0, 0, 0, .62) 100%);
|
|
200
|
-
}
|
|
201
|
-
.cena[data-acabamento="scanlines"]::after {
|
|
202
|
-
background: repeating-linear-gradient(rgba(0, 0, 0, .26) 0 2px, transparent 2px 5px);
|
|
203
|
-
opacity: .5;
|
|
204
|
-
}
|
|
205
|
-
.cena[data-acabamento="luz"]::after {
|
|
206
|
-
background: linear-gradient(118deg, transparent 34%,
|
|
207
|
-
color-mix(in srgb, var(--c-tom2) 26%, transparent) 47%, transparent 60%);
|
|
208
|
-
mix-blend-mode: screen;
|
|
209
|
-
}
|
|
210
|
-
.cena[data-acabamento="brilho"]::after {
|
|
211
|
-
background: radial-gradient(60% 45% at 50% 50%,
|
|
212
|
-
color-mix(in srgb, var(--c-tom) 22%, transparent), transparent 72%);
|
|
213
|
-
mix-blend-mode: screen;
|
|
214
|
-
}
|
|
215
|
-
.cena[data-acabamento="moldura"]::after {
|
|
216
|
-
border: 3px solid var(--c-linha);
|
|
217
|
-
inset: 34px;
|
|
218
|
-
border-radius: 4px;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
/* fluxo — o estúdio posiciona quando a cena usa um layout nomeado -------- */
|
|
222
|
-
|
|
223
|
-
.cena .fluxo {
|
|
224
|
-
position: absolute;
|
|
225
|
-
inset: 0;
|
|
226
|
-
z-index: 1;
|
|
227
|
-
display: flex;
|
|
228
|
-
flex-direction: column;
|
|
229
|
-
justify-content: center;
|
|
230
|
-
gap: 34px;
|
|
231
|
-
}
|
|
232
|
-
.cena .fluxo > .el { flex: 0 0 auto; max-width: 100%; }
|
|
233
|
-
|
|
234
|
-
/* --------------------------------------------------- legenda de fala ----
|
|
235
|
-
Legenda de vídeo é lida em movimento e, muitas vezes, sem som — e por cima
|
|
236
|
-
de uma imagem que muda a cada quadro. Cor de tema não resolve: sobre um céu
|
|
237
|
-
claro, texto claro some; sobre uma sombra, texto escuro some.
|
|
238
|
-
|
|
239
|
-
Então ela não confia no fundo. Branco puro, peso alto, chapa escura atrás e
|
|
240
|
-
um contorno de sombra que segura a leitura mesmo quando a chapa cai em cima
|
|
241
|
-
de algo claro. É a mesma decisão de toda legenda de streaming. */
|
|
242
|
-
.cena .faixa-fala {
|
|
243
|
-
display: flex;
|
|
244
|
-
flex-direction: column;
|
|
245
|
-
align-items: center;
|
|
246
|
-
gap: 10px;
|
|
247
|
-
text-align: center;
|
|
248
|
-
pointer-events: none;
|
|
249
|
-
}
|
|
250
|
-
.cena .el.txt.fala {
|
|
251
|
-
display: inline-block;
|
|
252
|
-
max-width: 86%;
|
|
253
|
-
color: #fff;
|
|
254
|
-
background: rgba(6, 8, 12, .72);
|
|
255
|
-
padding: .32em .7em;
|
|
256
|
-
border-radius: .28em;
|
|
257
|
-
text-shadow: 0 2px 10px rgba(0, 0, 0, .85), 0 0 2px rgba(0, 0, 0, .9);
|
|
258
|
-
text-wrap: balance;
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
.cena .fluxo[data-layout="capa"],
|
|
262
|
-
.cena .fluxo[data-layout="centro"],
|
|
263
|
-
.cena .fluxo[data-layout="citacao"] { align-items: center; text-align: center; }
|
|
264
|
-
.cena .fluxo[data-layout="capa"] > .el.txt,
|
|
265
|
-
.cena .fluxo[data-layout="centro"] > .el.txt,
|
|
266
|
-
.cena .fluxo[data-layout="citacao"] > .el { align-items: center; }
|
|
267
|
-
.cena .fluxo[data-layout="capa"] > .el.txt.corpo { max-width: 74%; }
|
|
268
|
-
|
|
269
|
-
.cena .fluxo[data-layout="secao"] { gap: 20px; }
|
|
270
|
-
.cena .fluxo[data-layout="numeros"] { gap: 76px; }
|
|
271
|
-
|
|
272
|
-
.cena .fluxo .colunas { display: grid; gap: 42px; align-items: start; }
|
|
273
|
-
.cena .fluxo .colunas > .el { position: relative; }
|
|
274
|
-
|
|
275
|
-
.cena .fluxo[data-layout="imagem-direita"],
|
|
276
|
-
.cena .fluxo[data-layout="imagem-esquerda"] {
|
|
277
|
-
flex-direction: row;
|
|
278
|
-
display: grid;
|
|
279
|
-
grid-template-columns: 1.05fr 1fr;
|
|
280
|
-
gap: 0;
|
|
281
|
-
}
|
|
282
|
-
.cena .fluxo .lado-texto {
|
|
283
|
-
display: flex; flex-direction: column; justify-content: center; gap: 30px;
|
|
284
|
-
min-width: 0;
|
|
285
|
-
}
|
|
286
|
-
.cena .fluxo .lado-imagem { position: relative; overflow: hidden; }
|
|
287
|
-
.cena .fluxo .lado-imagem .el.imagem { border-radius: 0 !important; }
|
|
288
|
-
|
|
289
|
-
/* elementos ------------------------------------------------------------- */
|
|
290
|
-
|
|
291
|
-
.el { position: absolute; }
|
|
292
|
-
.el.txt {
|
|
293
|
-
display: flex;
|
|
294
|
-
flex-direction: column;
|
|
295
|
-
justify-content: center;
|
|
296
|
-
font-family: var(--f-display);
|
|
297
|
-
letter-spacing: -.022em;
|
|
298
|
-
line-height: 1.12;
|
|
299
|
-
white-space: pre-wrap;
|
|
300
|
-
word-break: break-word;
|
|
301
|
-
}
|
|
302
|
-
.el.txt.corpo { font-family: var(--f-corpo); letter-spacing: -.005em; line-height: 1.5; }
|
|
303
|
-
.el.txt.chapeu {
|
|
304
|
-
font-size: 22px; font-weight: 640; letter-spacing: .17em;
|
|
305
|
-
text-transform: uppercase; color: var(--c-tom); line-height: 1.3;
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
/* estilos de texto — o oposto do "tudo igual" ---------------------------- */
|
|
309
|
-
|
|
310
|
-
.el.txt[data-estilo="gradiente"] {
|
|
311
|
-
background: linear-gradient(96deg, var(--c-tom), var(--c-tom2));
|
|
312
|
-
-webkit-background-clip: text;
|
|
313
|
-
background-clip: text;
|
|
314
|
-
color: transparent;
|
|
315
|
-
}
|
|
316
|
-
.el.txt[data-estilo="contorno"] {
|
|
317
|
-
color: transparent;
|
|
318
|
-
-webkit-text-stroke: 2.5px var(--c-texto);
|
|
319
|
-
}
|
|
320
|
-
.el.txt[data-estilo="contorno-tom"] {
|
|
321
|
-
color: transparent;
|
|
322
|
-
-webkit-text-stroke: 2.5px var(--c-tom);
|
|
323
|
-
}
|
|
324
|
-
.el.txt[data-estilo="sombra"] { text-shadow: 0 18px 40px rgba(0, 0, 0, .55); }
|
|
325
|
-
.el.txt[data-estilo="brilho"] {
|
|
326
|
-
text-shadow: 0 0 28px color-mix(in srgb, var(--c-tom) 85%, transparent),
|
|
327
|
-
0 0 70px color-mix(in srgb, var(--c-tom) 45%, transparent);
|
|
328
|
-
}
|
|
329
|
-
.el.txt[data-estilo="relevo"] { text-shadow: 5px 5px 0 var(--c-tom); }
|
|
330
|
-
.el.txt[data-estilo="marcador"] .marca,
|
|
331
|
-
.el.txt[data-estilo="marcador"] { display: inline; }
|
|
332
|
-
.el.txt[data-estilo="marcador"] > span.linha {
|
|
333
|
-
background: linear-gradient(transparent 58%, color-mix(in srgb, var(--c-tom) 55%, transparent) 58%);
|
|
334
|
-
box-decoration-break: clone;
|
|
335
|
-
-webkit-box-decoration-break: clone;
|
|
336
|
-
padding: 0 .08em;
|
|
337
|
-
}
|
|
338
|
-
.el.txt[data-estilo="fita"] > span.linha {
|
|
339
|
-
background: var(--c-tom);
|
|
340
|
-
color: #fff;
|
|
341
|
-
box-decoration-break: clone;
|
|
342
|
-
-webkit-box-decoration-break: clone;
|
|
343
|
-
padding: .06em .22em;
|
|
344
|
-
}
|
|
345
|
-
.el.txt[data-estilo="caixa"] {
|
|
346
|
-
border: 3px solid var(--c-tom);
|
|
347
|
-
border-radius: 18px;
|
|
348
|
-
padding: .34em .5em;
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
.el.forma { border-radius: 0; }
|
|
352
|
-
.el.imagem { overflow: hidden; }
|
|
353
|
-
.el.imagem img { width: 100%; height: 100%; display: block; }
|
|
354
|
-
|
|
355
|
-
/* movimento de imagem (Ken Burns) ---------------------------------------- */
|
|
356
|
-
|
|
357
|
-
@keyframes kbAproxima { from { transform: scale(1); } to { transform: scale(1.16); } }
|
|
358
|
-
@keyframes kbAfasta { from { transform: scale(1.16); } to { transform: scale(1); } }
|
|
359
|
-
@keyframes kbEsquerda { from { transform: scale(1.16) translateX(3%); } to { transform: scale(1.16) translateX(-3%); } }
|
|
360
|
-
@keyframes kbDireita { from { transform: scale(1.16) translateX(-3%); } to { transform: scale(1.16) translateX(3%); } }
|
|
361
|
-
@keyframes kbCima { from { transform: scale(1.16) translateY(3%); } to { transform: scale(1.16) translateY(-3%); } }
|
|
362
|
-
|
|
363
|
-
.el.imagem[data-mov] img { animation-duration: 9s; animation-timing-function: linear; animation-fill-mode: both; }
|
|
364
|
-
.el.imagem[data-mov="aproximar"] img { animation-name: kbAproxima; }
|
|
365
|
-
.el.imagem[data-mov="afastar"] img { animation-name: kbAfasta; }
|
|
366
|
-
.el.imagem[data-mov="esquerda"] img { animation-name: kbEsquerda; }
|
|
367
|
-
.el.imagem[data-mov="direita"] img { animation-name: kbDireita; }
|
|
368
|
-
.el.imagem[data-mov="cima"] img { animation-name: kbCima; }
|
|
369
|
-
|
|
370
|
-
.el.lista { display: flex; flex-direction: column; gap: calc(18px * var(--esc, 1)); justify-content: center; }
|
|
371
|
-
.el.lista .item {
|
|
372
|
-
position: relative;
|
|
373
|
-
padding-left: calc(42px * var(--esc, 1));
|
|
374
|
-
font-size: calc(34px * var(--esc, 1));
|
|
375
|
-
line-height: 1.42;
|
|
376
|
-
}
|
|
377
|
-
.el.lista .item::before {
|
|
378
|
-
content: ""; position: absolute; left: 4px; top: .58em;
|
|
379
|
-
width: 12px; height: 12px; border-radius: 4px; background: var(--c-tom);
|
|
380
|
-
}
|
|
381
|
-
.el.lista.numerada .item::before {
|
|
382
|
-
content: counter(li); counter-increment: li;
|
|
383
|
-
width: 30px; height: 30px; left: 0; top: .12em;
|
|
384
|
-
border-radius: 9px; background: var(--c-cartao);
|
|
385
|
-
border: 1px solid var(--c-linha); color: var(--c-tom);
|
|
386
|
-
font-size: 16px; font-weight: 640;
|
|
387
|
-
display: grid; place-items: center;
|
|
388
|
-
}
|
|
389
|
-
.el.lista.numerada { counter-reset: li; }
|
|
390
|
-
|
|
391
|
-
.el.cartoes { display: grid; gap: 24px; align-content: center; }
|
|
392
|
-
.el.cartoes .cartao {
|
|
393
|
-
background: var(--c-cartao);
|
|
394
|
-
border: 1px solid var(--c-linha);
|
|
395
|
-
border-radius: 20px;
|
|
396
|
-
padding: 26px 28px;
|
|
397
|
-
display: grid; gap: 8px; align-content: start;
|
|
398
|
-
}
|
|
399
|
-
.el.cartoes .cartao b { font-family: var(--f-display); font-size: 27px; font-weight: 620; letter-spacing: -.02em; }
|
|
400
|
-
.el.cartoes .cartao span { font-size: 19px; line-height: 1.45; color: var(--c-fraco); }
|
|
401
|
-
|
|
402
|
-
/* ═══════════════════════════════════════════════════════════════════════
|
|
403
|
-
O vocabulário do vídeo de referência.
|
|
404
|
-
|
|
405
|
-
Tudo aqui existe porque o dono mandou um vídeo e disse "pega tudo que tem
|
|
406
|
-
esse vídeo, e coloca pro Primo poder fazer também" — cartão com relevo,
|
|
407
|
-
vidro, foto, celular com conversa dentro.
|
|
408
|
-
|
|
409
|
-
O fio comum é o VIDRO: painel translúcido, borda clara em cima (onde a luz
|
|
410
|
-
bateria) e sombra embaixo. Não é enfeite — é o que dá profundidade sem
|
|
411
|
-
precisar de imagem, e o que separa "cartão" de "retângulo com borda".
|
|
412
|
-
═══════════════════════════════════════════════════════════════════════ */
|
|
413
|
-
|
|
414
|
-
.vidro, .el.cartoes[data-estilo="vidro"] .cartao, .el.passos .passo {
|
|
415
|
-
background:
|
|
416
|
-
linear-gradient(180deg, rgba(255, 255, 255, .075), rgba(255, 255, 255, .015)),
|
|
417
|
-
var(--c-cartao);
|
|
418
|
-
border: 1px solid var(--c-linha);
|
|
419
|
-
/* A luz de cima e a sombra de baixo, dentro da própria caixa. É o truque
|
|
420
|
-
inteiro do "liquid glass": a borda superior clara finge um bisel. */
|
|
421
|
-
box-shadow:
|
|
422
|
-
inset 0 1px 0 rgba(255, 255, 255, .13),
|
|
423
|
-
0 18px 44px rgba(0, 0, 0, .34);
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
/* ── MATERIAL: vidro (liquid glass) ─────────────────────────────────────
|
|
427
|
-
Pedido do dono: "liquid glass, icon, bem motion". O que faz o vidro ser
|
|
428
|
-
vidro, e não um retângulo translúcido:
|
|
429
|
-
· DESFOCA o que está atrás (backdrop-filter) e SATURA — o fundo fica
|
|
430
|
-
vivo através dele, como numa lente;
|
|
431
|
-
· o BISEL: uma linha clara em cima (onde a luz bate) e uma escura
|
|
432
|
-
embaixo, dentro da própria caixa;
|
|
433
|
-
· o REFLEXO diagonal (::before), que no vídeo atravessa devagar — é o
|
|
434
|
-
"líquido" do nome;
|
|
435
|
-
· a TINTA opcional (--tinta), fraca, para o vidro ter cor sem ficar opaco.
|
|
436
|
-
Vale em qualquer elemento: texto vira pílula de vidro, forma vira painel,
|
|
437
|
-
ícone vira azulejo, imagem ganha moldura. ─────────────────────────────── */
|
|
438
|
-
.el[data-material="vidro"] {
|
|
439
|
-
position: absolute;
|
|
440
|
-
background:
|
|
441
|
-
linear-gradient(135deg, rgba(255, 255, 255, .26), rgba(255, 255, 255, .07) 38%,
|
|
442
|
-
rgba(255, 255, 255, .02) 60%, rgba(255, 255, 255, .14)),
|
|
443
|
-
color-mix(in srgb, var(--tinta, transparent) 28%, transparent);
|
|
444
|
-
-webkit-backdrop-filter: blur(22px) saturate(1.65);
|
|
445
|
-
backdrop-filter: blur(22px) saturate(1.65);
|
|
446
|
-
border: 1px solid rgba(255, 255, 255, .30);
|
|
447
|
-
border-radius: 28px;
|
|
448
|
-
box-shadow:
|
|
449
|
-
inset 0 1px 0 rgba(255, 255, 255, .60),
|
|
450
|
-
inset 0 -1px 0 rgba(0, 0, 0, .20),
|
|
451
|
-
inset 0 0 0 1px rgba(255, 255, 255, .05),
|
|
452
|
-
0 26px 60px -22px rgba(0, 0, 0, .60);
|
|
453
|
-
overflow: hidden;
|
|
454
|
-
}
|
|
455
|
-
.el[data-material="vidro"]::before {
|
|
456
|
-
content: ""; position: absolute; inset: -40% -30%; pointer-events: none;
|
|
457
|
-
background: linear-gradient(115deg, transparent 40%, rgba(255, 255, 255, .30) 47%,
|
|
458
|
-
rgba(255, 255, 255, .07) 53%, transparent 60%);
|
|
459
|
-
transform: translateX(-28%);
|
|
460
|
-
}
|
|
461
|
-
.cena.animar .el[data-material="vidro"]::before { animation: brilhoVidro 7s cubic-bezier(.4, 0, .2, 1) infinite; }
|
|
462
|
-
@keyframes brilhoVidro {
|
|
463
|
-
0%, 100% { transform: translateX(-28%); }
|
|
464
|
-
50% { transform: translateX(28%); }
|
|
465
|
-
}
|
|
466
|
-
.el.txt[data-material="vidro"] { padding: .42em .85em; }
|
|
467
|
-
.el.forma[data-material="vidro"] { background-color: transparent; }
|
|
468
|
-
.el.imagem[data-material="vidro"] { padding: 14px; }
|
|
469
|
-
.el.imagem[data-material="vidro"] img { border-radius: calc(28px - 12px); }
|
|
470
|
-
.el.lista[data-material="vidro"], .el.cartoes[data-material="vidro"], .el.numeros[data-material="vidro"] { padding: 4% 5%; }
|
|
471
|
-
/* Tema claro: o vidro escurece um pouco, senão some no branco. */
|
|
472
|
-
[data-tema="claro"] .el[data-material="vidro"], .tema-claro .el[data-material="vidro"] {
|
|
473
|
-
background:
|
|
474
|
-
linear-gradient(135deg, rgba(255, 255, 255, .62), rgba(255, 255, 255, .30) 40%, rgba(255, 255, 255, .55)),
|
|
475
|
-
color-mix(in srgb, var(--tinta, transparent) 22%, transparent);
|
|
476
|
-
border-color: rgba(0, 0, 0, .10);
|
|
477
|
-
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .9), inset 0 -1px 0 rgba(0, 0, 0, .06), 0 26px 60px -24px rgba(0, 0, 0, .28);
|
|
478
|
-
}
|
|
479
|
-
|
|
480
|
-
/* ── ÍCONE COMO OBJETO: o azulejo de aplicativo ──────────────────────────
|
|
481
|
-
`estilo: "app"`: a cor em gradiente com duas luzes, o brilho na metade de
|
|
482
|
-
cima, a sombra colorida embaixo e o traço branco com sombra própria — é a
|
|
483
|
-
gramática de ícone de app, e o olho lê "produto" em vez de "sinal".
|
|
484
|
-
`estilo: "vidro"`: o mesmo azulejo em liquid glass. ─────────────────── */
|
|
485
|
-
.el.icone[data-estilo="app"], .el.icone[data-estilo="vidro"] {
|
|
486
|
-
position: absolute; border-radius: 23.5%; overflow: hidden;
|
|
487
|
-
}
|
|
488
|
-
/* O traço ocupa 58% do azulejo. NÃO por padding em %: padding em
|
|
489
|
-
porcentagem é relativo à LARGURA DO PAI (a cena, 1920px), e 21% virava
|
|
490
|
-
400px de padding num ícone de 220 — o azulejo engolia o canto da tela e
|
|
491
|
-
o traço sumia. Medido na primeira captura. */
|
|
492
|
-
.el.icone[data-estilo="app"] svg, .el.icone[data-estilo="vidro"] svg { width: 58%; height: 58%; }
|
|
493
|
-
.el.icone[data-estilo="app"] {
|
|
494
|
-
--az: var(--azulejo, var(--c-tom));
|
|
495
|
-
background:
|
|
496
|
-
radial-gradient(130% 110% at 18% 8%, rgba(255, 255, 255, .55), transparent 52%),
|
|
497
|
-
linear-gradient(160deg, color-mix(in srgb, var(--az) 78%, #fff), var(--az) 52%,
|
|
498
|
-
color-mix(in srgb, var(--az) 68%, #000));
|
|
499
|
-
box-shadow:
|
|
500
|
-
inset 0 2px 0 rgba(255, 255, 255, .55),
|
|
501
|
-
inset 0 -3px 0 rgba(0, 0, 0, .28),
|
|
502
|
-
0 22px 44px -16px color-mix(in srgb, var(--az) 70%, #000);
|
|
503
|
-
}
|
|
504
|
-
.el.icone[data-estilo="app"]::after {
|
|
505
|
-
content: ""; position: absolute; left: 5%; right: 5%; top: 3%; height: 47%; pointer-events: none;
|
|
506
|
-
border-radius: 22% 22% 48% 48% / 30% 30% 60% 60%;
|
|
507
|
-
background: linear-gradient(180deg, rgba(255, 255, 255, .34), rgba(255, 255, 255, .02));
|
|
508
|
-
}
|
|
509
|
-
.el.icone[data-estilo="app"] svg { position: relative; filter: drop-shadow(0 4px 8px rgba(0, 0, 0, .35)); }
|
|
510
|
-
.el.icone[data-estilo="vidro"] {
|
|
511
|
-
--tinta: var(--azulejo, var(--c-tom));
|
|
512
|
-
background:
|
|
513
|
-
linear-gradient(135deg, rgba(255, 255, 255, .28), rgba(255, 255, 255, .07) 40%, rgba(255, 255, 255, .16)),
|
|
514
|
-
color-mix(in srgb, var(--tinta) 30%, transparent);
|
|
515
|
-
-webkit-backdrop-filter: blur(20px) saturate(1.6); backdrop-filter: blur(20px) saturate(1.6);
|
|
516
|
-
border: 1px solid rgba(255, 255, 255, .32);
|
|
517
|
-
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .6), inset 0 -1px 0 rgba(0, 0, 0, .2), 0 24px 50px -20px rgba(0, 0, 0, .55);
|
|
518
|
-
}
|
|
519
|
-
.el.icone[data-estilo="vidro"] svg { position: relative; filter: drop-shadow(0 3px 10px rgba(0, 0, 0, .3)); }
|
|
520
|
-
|
|
521
|
-
/* ── selo ──────────────────────────────────────────────────────────────── */
|
|
522
|
-
.el.selo {
|
|
523
|
-
display: inline-flex; align-items: center; gap: .5em;
|
|
524
|
-
align-self: flex-start;
|
|
525
|
-
font-family: var(--f-corpo);
|
|
526
|
-
font-size: 21px; font-weight: 620;
|
|
527
|
-
letter-spacing: .13em; text-transform: uppercase;
|
|
528
|
-
color: var(--c-tom);
|
|
529
|
-
background: color-mix(in srgb, var(--c-tom) 13%, transparent);
|
|
530
|
-
border: 1px solid color-mix(in srgb, var(--c-tom) 42%, transparent);
|
|
531
|
-
border-radius: 999px;
|
|
532
|
-
padding: .42em 1.05em;
|
|
533
|
-
}
|
|
534
|
-
.el.selo[data-estilo="vivo"] {
|
|
535
|
-
color: var(--c-fundo);
|
|
536
|
-
background: var(--c-tom);
|
|
537
|
-
border-color: var(--c-tom);
|
|
538
|
-
}
|
|
539
|
-
.el.selo[data-estilo="solto"] {
|
|
540
|
-
background: none; border-color: transparent; padding-left: 0; padding-right: 0;
|
|
541
|
-
}
|
|
542
|
-
.el.selo .selo-icone { font-size: 1.15em; letter-spacing: 0; }
|
|
543
|
-
.cena .fluxo[data-layout="capa"] > .el.selo,
|
|
544
|
-
.cena .fluxo[data-layout="centro"] > .el.selo { align-self: center; }
|
|
545
|
-
|
|
546
|
-
/* ── progresso ─────────────────────────────────────────────────────────── */
|
|
547
|
-
.el.progresso {
|
|
548
|
-
display: flex; align-items: center; gap: 18px;
|
|
549
|
-
color: var(--c-tom); font-family: var(--f-corpo);
|
|
550
|
-
}
|
|
551
|
-
.el.progresso > b { font-size: 24px; font-weight: 620; letter-spacing: .04em; }
|
|
552
|
-
.el.progresso .pontos { display: flex; align-items: center; gap: 9px; }
|
|
553
|
-
.el.progresso .pontos i {
|
|
554
|
-
width: 9px; height: 9px; border-radius: 50%;
|
|
555
|
-
background: var(--c-linha);
|
|
556
|
-
transition: none;
|
|
557
|
-
}
|
|
558
|
-
.el.progresso .pontos i.feito { background: color-mix(in srgb, var(--c-tom) 45%, transparent); }
|
|
559
|
-
.el.progresso .pontos i.aqui {
|
|
560
|
-
background: var(--c-tom); width: 12px; height: 12px;
|
|
561
|
-
box-shadow: 0 0 0 4px color-mix(in srgb, var(--c-tom) 18%, transparent);
|
|
562
|
-
}
|
|
563
|
-
|
|
564
|
-
/* ── avatar ────────────────────────────────────────────────────────────── */
|
|
565
|
-
.el.avatar {
|
|
566
|
-
border-radius: 50%; overflow: hidden; position: relative;
|
|
567
|
-
display: grid; place-items: center; flex: 0 0 auto;
|
|
568
|
-
background: var(--c-cartao);
|
|
569
|
-
/* O anel aceso: dois anéis, um forte colado e um aberto e fraco. Um só
|
|
570
|
-
fica duro; dois viram luz. */
|
|
571
|
-
box-shadow:
|
|
572
|
-
0 0 0 3px var(--c-tom),
|
|
573
|
-
0 0 0 12px color-mix(in srgb, var(--c-tom) 16%, transparent),
|
|
574
|
-
0 22px 50px rgba(0, 0, 0, .42);
|
|
575
|
-
}
|
|
576
|
-
.el.avatar img { width: 100%; height: 100%; object-fit: cover; display: block; }
|
|
577
|
-
.el.avatar b {
|
|
578
|
-
font-family: var(--f-display); font-weight: 640;
|
|
579
|
-
color: var(--c-tom); letter-spacing: .02em;
|
|
580
|
-
}
|
|
581
|
-
.cena .fluxo[data-layout="capa"] > .el.avatar,
|
|
582
|
-
.cena .fluxo[data-layout="centro"] > .el.avatar { align-self: center; }
|
|
583
|
-
|
|
584
|
-
/* ── dispositivo ───────────────────────────────────────────────────────── */
|
|
585
|
-
/* O aparelho ENCOLHE para caber na cena. Preso só pela largura, o celular de
|
|
586
|
-
380px virava 800px de altura e vazava pelo pé do quadro — metade da
|
|
587
|
-
conversa ficava fora do vídeo, e na tela do editor parecia certo porque ali
|
|
588
|
-
a página rola. A altura é que manda; a largura vem da proporção. */
|
|
589
|
-
.el.dispositivo {
|
|
590
|
-
display: grid; align-content: center; justify-items: center;
|
|
591
|
-
flex: 0 1 auto; min-height: 0; max-height: 100%;
|
|
592
|
-
}
|
|
593
|
-
.el.dispositivo .moldura {
|
|
594
|
-
background: linear-gradient(180deg, #22262c, #14171b);
|
|
595
|
-
box-shadow:
|
|
596
|
-
inset 0 1px 0 rgba(255, 255, 255, .16),
|
|
597
|
-
0 30px 70px rgba(0, 0, 0, .5);
|
|
598
|
-
overflow: hidden;
|
|
599
|
-
display: flex; flex-direction: column;
|
|
600
|
-
}
|
|
601
|
-
.el.dispositivo .tela {
|
|
602
|
-
flex: 1; overflow: hidden;
|
|
603
|
-
background: var(--c-fundo2);
|
|
604
|
-
display: flex; flex-direction: column; justify-content: center;
|
|
605
|
-
gap: 16px;
|
|
606
|
-
}
|
|
607
|
-
|
|
608
|
-
.el.dispositivo[data-forma="celular"] { width: 100%; }
|
|
609
|
-
/* O TETO DO APARELHO ACOMPANHA O QUADRO. Ele era 780px fixos, calibrados em
|
|
610
|
-
1920x1080 — e num vídeo vertical de 1080x1920 isso deixa o celular ocupando
|
|
611
|
-
um terço da altura, boiando no meio do branco. Num anúncio o aparelho é o
|
|
612
|
-
assunto da cena: ele ocupa a tela. `--alto` é a altura da cena, posta pelo
|
|
613
|
-
renderCena. */
|
|
614
|
-
.el.dispositivo[data-forma="celular"] .moldura {
|
|
615
|
-
/* Altura em PIXEL vindo do quadro, sem porcentagem: `min(100%, …)` dentro de
|
|
616
|
-
um pai de altura automática é percentagem circular — o navegador desiste
|
|
617
|
-
dela e o aparelho volta a ser medido pela largura. Medido: 408px de altura
|
|
618
|
-
num quadro de 1920, um quinto da tela. */
|
|
619
|
-
height: calc(var(--alto, 1080px) * .62); width: auto; max-width: 100%;
|
|
620
|
-
aspect-ratio: 9 / 19;
|
|
621
|
-
border-radius: 42px; padding: 12px;
|
|
622
|
-
}
|
|
623
|
-
.el.dispositivo[data-forma="celular"] .tela { border-radius: 31px; padding: 26px 20px; }
|
|
624
|
-
/* A ilha da câmera. Sem ela um retângulo arredondado é só um retângulo
|
|
625
|
-
arredondado — é este detalhe que faz o olho ler "celular". */
|
|
626
|
-
.el.dispositivo[data-forma="celular"] .moldura::before {
|
|
627
|
-
content: ""; position: absolute; left: 50%; top: 20px;
|
|
628
|
-
width: 88px; height: 9px; border-radius: 999px;
|
|
629
|
-
background: rgba(0, 0, 0, .55); transform: translateX(-50%); z-index: 2;
|
|
630
|
-
}
|
|
631
|
-
.el.dispositivo[data-forma="celular"] .moldura { position: relative; }
|
|
632
|
-
|
|
633
|
-
.el.dispositivo[data-forma="tablet"] .moldura {
|
|
634
|
-
height: min(100%, 740px); width: auto; max-width: 100%;
|
|
635
|
-
aspect-ratio: 3 / 4;
|
|
636
|
-
border-radius: 26px; padding: 16px;
|
|
637
|
-
}
|
|
638
|
-
.el.dispositivo[data-forma="tablet"] .tela { border-radius: 12px; padding: 26px; }
|
|
639
|
-
|
|
640
|
-
.el.dispositivo[data-forma="notebook"] { width: 100%; }
|
|
641
|
-
.el.dispositivo[data-forma="notebook"] .moldura {
|
|
642
|
-
width: 100%; max-height: 100%; aspect-ratio: 16 / 10;
|
|
643
|
-
border-radius: 16px 16px 4px 4px; padding: 12px 12px 14px;
|
|
644
|
-
}
|
|
645
|
-
.el.dispositivo[data-forma="notebook"] .tela { border-radius: 7px; padding: 26px 28px; }
|
|
646
|
-
.el.dispositivo[data-forma="notebook"] .base {
|
|
647
|
-
width: 116%; height: 13px; margin-top: -1px;
|
|
648
|
-
border-radius: 0 0 12px 12px;
|
|
649
|
-
background: linear-gradient(180deg, #2c3138, #171a1e);
|
|
650
|
-
box-shadow: 0 12px 26px rgba(0, 0, 0, .45);
|
|
651
|
-
}
|
|
652
|
-
|
|
653
|
-
.el.dispositivo[data-forma="navegador"] { width: 100%; }
|
|
654
|
-
.el.dispositivo[data-forma="navegador"] .moldura {
|
|
655
|
-
width: 100%; max-height: 100%; aspect-ratio: 16 / 10; border-radius: 14px; padding: 0;
|
|
656
|
-
}
|
|
657
|
-
.el.dispositivo .barra-nav {
|
|
658
|
-
display: flex; align-items: center; gap: 8px;
|
|
659
|
-
padding: 13px 16px; flex: 0 0 auto;
|
|
660
|
-
border-bottom: 1px solid rgba(255, 255, 255, .07);
|
|
661
|
-
}
|
|
662
|
-
.el.dispositivo .barra-nav i {
|
|
663
|
-
width: 11px; height: 11px; border-radius: 50%; background: rgba(255, 255, 255, .17);
|
|
664
|
-
}
|
|
665
|
-
.el.dispositivo .barra-nav .url {
|
|
666
|
-
margin-left: 12px; flex: 1;
|
|
667
|
-
font-family: var(--f-mono); font-size: 15px; color: rgba(255, 255, 255, .45);
|
|
668
|
-
background: rgba(0, 0, 0, .3); border-radius: 999px; padding: 5px 14px;
|
|
669
|
-
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
670
|
-
}
|
|
671
|
-
.el.dispositivo[data-forma="navegador"] .tela { padding: 24px 26px; }
|
|
672
|
-
|
|
673
|
-
/* ── conversa ──────────────────────────────────────────────────────────── */
|
|
674
|
-
.el.conversa {
|
|
675
|
-
display: flex; flex-direction: column; gap: 14px; justify-content: flex-end;
|
|
676
|
-
}
|
|
677
|
-
.el.conversa .balao {
|
|
678
|
-
max-width: 88%; padding: 13px 17px; line-height: 1.42;
|
|
679
|
-
font-size: 20px; border-radius: 16px;
|
|
680
|
-
}
|
|
681
|
-
.el.conversa .balao.meu {
|
|
682
|
-
align-self: flex-start;
|
|
683
|
-
background: var(--c-cartao); border: 1px solid var(--c-linha);
|
|
684
|
-
color: var(--c-texto); border-bottom-left-radius: 5px;
|
|
685
|
-
}
|
|
686
|
-
/* A resposta é o que importa: ela leva a cor do tema. */
|
|
687
|
-
.el.conversa .balao.dela {
|
|
688
|
-
align-self: flex-end;
|
|
689
|
-
background: color-mix(in srgb, var(--c-tom) 20%, transparent);
|
|
690
|
-
border: 1px solid color-mix(in srgb, var(--c-tom) 40%, transparent);
|
|
691
|
-
color: var(--c-texto); border-bottom-right-radius: 5px;
|
|
692
|
-
}
|
|
693
|
-
/* Os balões entram um de cada vez, como numa conversa de verdade. Todos ao
|
|
694
|
-
mesmo tempo lê como captura de tela, não como diálogo. */
|
|
695
|
-
.cena.animar .el.conversa .balao {
|
|
696
|
-
animation: balaoEntra .46s cubic-bezier(.22, 1, .36, 1) both;
|
|
697
|
-
animation-delay: calc(var(--atraso, 0) * 1s);
|
|
698
|
-
}
|
|
699
|
-
@keyframes balaoEntra {
|
|
700
|
-
from { opacity: 0; transform: translateY(14px) scale(.96); }
|
|
701
|
-
to { opacity: 1; transform: none; }
|
|
702
|
-
}
|
|
703
|
-
|
|
704
|
-
/* ── passos ────────────────────────────────────────────────────────────── */
|
|
705
|
-
/* Sem largura declarada, o grid encolhe até o conteúdo e as três etapas
|
|
706
|
-
viram três selinhos no meio da tela — em `capa` e `centro`, onde o eixo
|
|
707
|
-
está centralizado, isso é o padrão. Etapa é estrutura: ocupa a linha. */
|
|
708
|
-
.el.passos { display: grid; gap: 18px; align-items: stretch; width: 100%; }
|
|
709
|
-
.el.passos .passo {
|
|
710
|
-
border-radius: 18px; padding: 22px 20px;
|
|
711
|
-
display: grid; gap: 6px; align-content: start;
|
|
712
|
-
color: var(--c-fraco);
|
|
713
|
-
}
|
|
714
|
-
.el.passos .passo b {
|
|
715
|
-
font-family: var(--f-display); font-size: 23px; font-weight: 620;
|
|
716
|
-
letter-spacing: -.015em; color: inherit;
|
|
717
|
-
}
|
|
718
|
-
.el.passos .passo span { font-size: 17px; line-height: 1.4; }
|
|
719
|
-
.el.passos .passo.feito { color: var(--c-texto); }
|
|
720
|
-
/* O de agora cresce e acende. Escala pequena de propósito: 1.06 lê como
|
|
721
|
-
"este", 1.2 lê como erro de layout. */
|
|
722
|
-
.el.passos .passo.agora {
|
|
723
|
-
color: var(--c-texto);
|
|
724
|
-
transform: scale(1.06);
|
|
725
|
-
border-color: color-mix(in srgb, var(--c-tom) 55%, transparent);
|
|
726
|
-
background:
|
|
727
|
-
linear-gradient(180deg, color-mix(in srgb, var(--c-tom) 17%, transparent),
|
|
728
|
-
color-mix(in srgb, var(--c-tom) 6%, transparent));
|
|
729
|
-
box-shadow:
|
|
730
|
-
inset 0 1px 0 rgba(255, 255, 255, .16),
|
|
731
|
-
0 20px 46px color-mix(in srgb, var(--c-tom) 16%, transparent);
|
|
732
|
-
}
|
|
733
|
-
.el.passos .passo.agora b { color: var(--c-tom); }
|
|
734
|
-
|
|
735
|
-
/* ── opcoes ────────────────────────────────────────────────────────────── */
|
|
736
|
-
.el.opcoes { display: grid; gap: 12px; align-content: center; }
|
|
737
|
-
.el.opcoes .pergunta {
|
|
738
|
-
font-family: var(--f-display); font-size: 26px; font-weight: 640;
|
|
739
|
-
letter-spacing: -.018em; margin-bottom: 6px; color: var(--c-texto);
|
|
740
|
-
}
|
|
741
|
-
.el.opcoes .opcao {
|
|
742
|
-
border: 1px solid var(--c-linha); border-radius: 12px;
|
|
743
|
-
padding: 14px 18px; font-size: 19px; color: var(--c-fraco);
|
|
744
|
-
background: var(--c-cartao);
|
|
745
|
-
}
|
|
746
|
-
.el.opcoes .opcao.certa {
|
|
747
|
-
color: var(--c-tom);
|
|
748
|
-
border-color: color-mix(in srgb, var(--c-tom) 60%, transparent);
|
|
749
|
-
background: color-mix(in srgb, var(--c-tom) 12%, transparent);
|
|
750
|
-
}
|
|
751
|
-
/* O ✓ vem do CSS, não do texto: assim o autor escreve só a alternativa e a
|
|
752
|
-
marca nunca aparece por engano na errada. */
|
|
753
|
-
.el.opcoes .opcao.certa::before { content: "✓ "; font-weight: 700; }
|
|
754
|
-
.cena.animar .el.opcoes .opcao {
|
|
755
|
-
animation: balaoEntra .4s cubic-bezier(.22, 1, .36, 1) both;
|
|
756
|
-
animation-delay: calc(var(--atraso, 0) * 1s);
|
|
757
|
-
}
|
|
758
|
-
|
|
759
|
-
.el.numeros { display: grid; gap: calc(30px * var(--esc, 1)); align-content: center; }
|
|
760
|
-
.el.numeros .num { display: grid; gap: 6px; }
|
|
761
|
-
.el.numeros .num b {
|
|
762
|
-
font-family: var(--f-display);
|
|
763
|
-
font-size: var(--tam-num, calc(84px * var(--esc, 1)));
|
|
764
|
-
font-weight: 680;
|
|
765
|
-
letter-spacing: -.045em; line-height: 1; color: var(--c-tom);
|
|
766
|
-
font-variant-numeric: tabular-nums;
|
|
767
|
-
}
|
|
768
|
-
.el.numeros .num span {
|
|
769
|
-
font-size: calc(20px * var(--esc, 1));
|
|
770
|
-
color: var(--c-fraco); line-height: 1.35;
|
|
771
|
-
}
|
|
772
|
-
|
|
773
|
-
.el.tabela { display: flex; align-items: center; }
|
|
774
|
-
.el.tabela table { width: 100%; border-collapse: collapse; font-size: 22px; }
|
|
775
|
-
.el.tabela th, .el.tabela td { text-align: left; padding: 14px 18px; border-bottom: 1px solid var(--c-linha); }
|
|
776
|
-
.el.tabela th {
|
|
777
|
-
font-size: 15px; text-transform: uppercase; letter-spacing: .1em;
|
|
778
|
-
color: var(--c-fraco); font-weight: 620;
|
|
779
|
-
}
|
|
780
|
-
|
|
781
|
-
.el.codigo {
|
|
782
|
-
background: var(--c-fundo2);
|
|
783
|
-
border: 1px solid var(--c-linha);
|
|
784
|
-
border-radius: 18px;
|
|
785
|
-
padding: 26px 30px;
|
|
786
|
-
font-family: var(--f-mono);
|
|
787
|
-
font-size: 21px;
|
|
788
|
-
line-height: 1.6;
|
|
789
|
-
white-space: pre;
|
|
790
|
-
overflow: hidden;
|
|
791
|
-
display: flex; flex-direction: column; justify-content: center;
|
|
792
|
-
}
|
|
793
|
-
|
|
794
|
-
.el.citacao { display: flex; flex-direction: column; justify-content: center; gap: 26px; }
|
|
795
|
-
.el.citacao .aspas {
|
|
796
|
-
font-family: var(--f-display); font-size: 52px; font-weight: 500;
|
|
797
|
-
line-height: 1.3; letter-spacing: -.02em;
|
|
798
|
-
}
|
|
799
|
-
.el.citacao .autor { font-size: 21px; color: var(--c-fraco); letter-spacing: .04em; }
|
|
800
|
-
|
|
801
|
-
.el.icone { display: grid; place-items: center; }
|
|
802
|
-
.el.icone svg { width: 100%; height: 100%; }
|
|
803
|
-
|
|
804
|
-
.el.no {
|
|
805
|
-
display: grid; place-items: center; text-align: center;
|
|
806
|
-
border-radius: 18px;
|
|
807
|
-
background: var(--c-cartao);
|
|
808
|
-
border: 1.5px solid var(--c-linha);
|
|
809
|
-
font-family: var(--f-display);
|
|
810
|
-
font-size: 30px; font-weight: 580;
|
|
811
|
-
padding: 18px 22px;
|
|
812
|
-
line-height: 1.25;
|
|
813
|
-
}
|
|
814
|
-
.el.no.destaque { background: var(--c-tom); border-color: transparent; color: #fff; }
|
|
815
|
-
.el.no.circulo { border-radius: 999px; }
|
|
816
|
-
|
|
817
|
-
.cena svg.conectores { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; z-index: 1; }
|
|
818
|
-
|
|
819
|
-
/* animação de entrada ----------------------------------------------------- */
|
|
820
|
-
|
|
821
|
-
@keyframes anSubir { from { opacity: 0; transform: translateY(26px); } to { opacity: 1; transform: none; } }
|
|
822
|
-
@keyframes anSurgir { from { opacity: 0; } to { opacity: 1; } }
|
|
823
|
-
@keyframes anEsq { from { opacity: 0; transform: translateX(-36px); } to { opacity: 1; transform: none; } }
|
|
824
|
-
@keyframes anDir { from { opacity: 0; transform: translateX(36px); } to { opacity: 1; transform: none; } }
|
|
825
|
-
@keyframes anZoom { from { opacity: 0; transform: scale(.9); } to { opacity: 1; transform: none; } }
|
|
826
|
-
@keyframes anDesfoque { from { opacity: 0; filter: blur(16px); transform: scale(1.03); } to { opacity: 1; filter: blur(0); transform: none; } }
|
|
827
|
-
@keyframes anCair { from { opacity: 0; transform: translateY(-30px); } to { opacity: 1; transform: none; } }
|
|
828
|
-
@keyframes anGirar { from { opacity: 0; transform: rotate(-7deg) scale(.9); } to { opacity: 1; transform: none; } }
|
|
829
|
-
@keyframes anSaltar {
|
|
830
|
-
0% { opacity: 0; transform: translateY(46px) scale(.94); }
|
|
831
|
-
62% { opacity: 1; transform: translateY(-11px) scale(1.02); }
|
|
832
|
-
100% { opacity: 1; transform: none; }
|
|
833
|
-
}
|
|
834
|
-
@keyframes anRevelar {
|
|
835
|
-
from { opacity: 1; clip-path: inset(0 100% 0 0); }
|
|
836
|
-
to { opacity: 1; clip-path: inset(0 0 0 0); }
|
|
837
|
-
}
|
|
838
|
-
@keyframes anCortina {
|
|
839
|
-
from { opacity: 1; clip-path: inset(100% 0 0 0); }
|
|
840
|
-
to { opacity: 1; clip-path: inset(0 0 0 0); }
|
|
841
|
-
}
|
|
842
|
-
@keyframes anElastico {
|
|
843
|
-
0% { opacity: 0; transform: scale(.6); }
|
|
844
|
-
55% { opacity: 1; transform: scale(1.08); }
|
|
845
|
-
75% { transform: scale(.97); }
|
|
846
|
-
100% { opacity: 1; transform: none; }
|
|
847
|
-
}
|
|
848
|
-
|
|
849
|
-
.cena.animar .el[data-an] {
|
|
850
|
-
animation-duration: .66s;
|
|
851
|
-
animation-timing-function: cubic-bezier(.22, 1, .36, 1);
|
|
852
|
-
animation-fill-mode: both;
|
|
853
|
-
animation-delay: calc(var(--atraso, 0) * 1s);
|
|
854
|
-
}
|
|
855
|
-
.cena.animar .el[data-an="subir"] { animation-name: anSubir; }
|
|
856
|
-
.cena.animar .el[data-an="surgir"] { animation-name: anSurgir; }
|
|
857
|
-
.cena.animar .el[data-an="esquerda"] { animation-name: anEsq; }
|
|
858
|
-
.cena.animar .el[data-an="direita"] { animation-name: anDir; }
|
|
859
|
-
.cena.animar .el[data-an="zoom"] { animation-name: anZoom; }
|
|
860
|
-
.cena.animar .el[data-an="desfoque"] { animation-name: anDesfoque; }
|
|
861
|
-
.cena.animar .el[data-an="cair"] { animation-name: anCair; }
|
|
862
|
-
.cena.animar .el[data-an="girar"] { animation-name: anGirar; }
|
|
863
|
-
.cena.animar .el[data-an="saltar"] { animation-name: anSaltar; animation-duration: .9s; }
|
|
864
|
-
.cena.animar .el[data-an="revelar"] { animation-name: anRevelar; animation-duration: .85s; }
|
|
865
|
-
.cena.animar .el[data-an="cortina"] { animation-name: anCortina; animation-duration: .85s; }
|
|
866
|
-
.cena.animar .el[data-an="elastico"] { animation-name: anElastico; animation-duration: .95s; }
|
|
867
|
-
|
|
868
|
-
/* palavra a palavra — cada palavra entra sozinha.
|
|
869
|
-
|
|
870
|
-
A palavra nasce VISÍVEL, e quem a esconde é a animação (com `both`, o
|
|
871
|
-
estado inicial do keyframe já vale antes de ela começar). Com `opacity: 0`
|
|
872
|
-
aqui na base, toda cena com `anim: "palavra"` saía EM BRANCO fora do player
|
|
873
|
-
— na miniatura, na prévia parada do editor, em qualquer render estático.
|
|
874
|
-
Texto que some sem erro nenhum é o defeito mais caro deste arquivo. */
|
|
875
|
-
.el.txt .pal { display: inline-block; }
|
|
876
|
-
.cena.animar .el[data-an="palavra"] { animation: none; opacity: 1; }
|
|
877
|
-
.cena.animar .el[data-an="palavra"] .pal {
|
|
878
|
-
animation: anSubir .58s cubic-bezier(.22, 1, .36, 1) both;
|
|
879
|
-
animation-delay: calc(var(--atraso, 0) * 1s + var(--p, 0) * .085s);
|
|
880
|
-
}
|
|
881
|
-
|
|
882
|
-
/* itens de lista com revelação em cascata */
|
|
883
|
-
.cena.animar .el.lista .item[data-an] {
|
|
884
|
-
animation: anSubir .6s cubic-bezier(.22, 1, .36, 1) both;
|
|
885
|
-
animation-delay: calc(var(--atraso, 0) * 1s);
|
|
886
|
-
}
|
|
887
|
-
|
|
888
|
-
/* transições entre cenas (Corte) ----------------------------------------- */
|
|
889
|
-
|
|
890
|
-
@keyframes trFade { from { opacity: 0; } to { opacity: 1; } }
|
|
891
|
-
@keyframes trDeslizar { from { opacity: 1; transform: translateX(100%); } to { transform: none; } }
|
|
892
|
-
@keyframes trDeslizarCima { from { opacity: 1; transform: translateY(100%); } to { transform: none; } }
|
|
893
|
-
@keyframes trZoom { from { opacity: 0; transform: scale(1.22); } to { opacity: 1; transform: none; } }
|
|
894
|
-
@keyframes trLimpar { from { clip-path: inset(0 100% 0 0); } to { clip-path: inset(0 0 0 0); } }
|
|
895
|
-
@keyframes trPersiana { from { clip-path: inset(0 0 100% 0); } to { clip-path: inset(0 0 0 0); } }
|
|
896
|
-
@keyframes trFlash {
|
|
897
|
-
0% { opacity: 0; filter: brightness(6); }
|
|
898
|
-
22% { opacity: 1; filter: brightness(3); }
|
|
899
|
-
100% { opacity: 1; filter: brightness(1); }
|
|
900
|
-
}
|
|
901
|
-
|
|
902
|
-
.cena[data-transicao] { animation-duration: .62s; animation-timing-function: cubic-bezier(.22, 1, .36, 1); animation-fill-mode: both; }
|
|
903
|
-
.cena[data-transicao="fade"] { animation-name: trFade; }
|
|
904
|
-
.cena[data-transicao="deslizar"] { animation-name: trDeslizar; }
|
|
905
|
-
.cena[data-transicao="subir"] { animation-name: trDeslizarCima; }
|
|
906
|
-
.cena[data-transicao="zoom"] { animation-name: trZoom; }
|
|
907
|
-
.cena[data-transicao="limpar"] { animation-name: trLimpar; }
|
|
908
|
-
.cena[data-transicao="persiana"] { animation-name: trPersiana; }
|
|
909
|
-
.cena[data-transicao="flash"] { animation-name: trFlash; animation-duration: .5s; }
|
|
910
|
-
.cena[data-transicao="corte"] { animation: none; }
|
|
911
|
-
|
|
912
|
-
/* ---------------------------------------------------------- documento ---- */
|
|
913
|
-
|
|
914
|
-
.folha-doc {
|
|
915
|
-
width: 794px;
|
|
916
|
-
min-height: 1123px;
|
|
917
|
-
background: var(--c-fundo);
|
|
918
|
-
color: var(--c-texto);
|
|
919
|
-
font-family: var(--f-corpo);
|
|
920
|
-
padding: 84px 88px;
|
|
921
|
-
font-size: 15.5px;
|
|
922
|
-
line-height: 1.72;
|
|
923
|
-
}
|
|
924
|
-
.folha-doc > * { margin: 0 0 18px; }
|
|
925
|
-
.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; }
|
|
926
|
-
.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; }
|
|
927
|
-
.folha-doc h3 { font-family: var(--f-display); font-size: 18px; margin: 24px 0 8px; font-weight: 620; }
|
|
928
|
-
.folha-doc .chapeu-doc { color: var(--c-tom); font-size: 12px; font-weight: 640; letter-spacing: .16em; text-transform: uppercase; margin-bottom: 10px; }
|
|
929
|
-
.folha-doc .apoio { font-size: 18px; color: var(--c-fraco); line-height: 1.6; }
|
|
930
|
-
.folha-doc ul, .folha-doc ol { padding-left: 22px; }
|
|
931
|
-
.folha-doc li { margin-bottom: 7px; }
|
|
932
|
-
.folha-doc blockquote {
|
|
933
|
-
margin: 22px 0; padding: 4px 0 4px 22px;
|
|
934
|
-
border-left: 3px solid var(--c-tom); color: var(--c-fraco); font-size: 17px;
|
|
935
|
-
}
|
|
936
|
-
.folha-doc table { width: 100%; border-collapse: collapse; font-size: 14px; margin: 20px 0; }
|
|
937
|
-
.folha-doc th, .folha-doc td { text-align: left; padding: 10px 12px; border-bottom: 1px solid var(--c-linha); }
|
|
938
|
-
.folha-doc th { font-size: 11.5px; text-transform: uppercase; letter-spacing: .09em; color: var(--c-fraco); }
|
|
939
|
-
.folha-doc pre {
|
|
940
|
-
background: var(--c-fundo2); border: 1px solid var(--c-linha); border-radius: 10px;
|
|
941
|
-
padding: 16px 18px; font-family: var(--f-mono); font-size: 13px; line-height: 1.6; overflow-x: auto;
|
|
942
|
-
}
|
|
943
|
-
.folha-doc code { font-family: var(--f-mono); font-size: .88em; background: var(--c-cartao); padding: 1px 6px; border-radius: 5px; }
|
|
944
|
-
.folha-doc hr { border: 0; border-top: 1px solid var(--c-linha); margin: 28px 0; }
|
|
945
|
-
.folha-doc figure { margin: 24px 0; }
|
|
946
|
-
.folha-doc figure img { width: 100%; border-radius: 10px; display: block; }
|
|
947
|
-
.folha-doc figcaption { font-size: 12.5px; color: var(--c-fraco); margin-top: 8px; }
|
|
948
|
-
|
|
949
|
-
/* ---------------------------------------------------------- planilha ----- */
|
|
950
|
-
|
|
951
|
-
.planilha { background: var(--c-fundo); color: var(--c-texto); font-family: var(--f-corpo); }
|
|
952
|
-
.planilha table { border-collapse: collapse; font-size: 13px; width: 100%; }
|
|
953
|
-
.planilha th, .planilha td {
|
|
954
|
-
border: 1px solid var(--c-linha);
|
|
955
|
-
padding: 8px 11px;
|
|
956
|
-
text-align: left;
|
|
957
|
-
min-width: 96px;
|
|
958
|
-
white-space: nowrap;
|
|
959
|
-
}
|
|
960
|
-
.planilha thead th {
|
|
961
|
-
background: var(--c-fundo2);
|
|
962
|
-
font-size: 11px; text-transform: uppercase; letter-spacing: .08em;
|
|
963
|
-
color: var(--c-fraco); font-weight: 620;
|
|
964
|
-
position: sticky; top: 0; z-index: 2;
|
|
965
|
-
}
|
|
966
|
-
.planilha tbody th {
|
|
967
|
-
background: var(--c-fundo2); color: var(--c-fraco);
|
|
968
|
-
font-weight: 500; font-size: 11px; text-align: center; min-width: 42px;
|
|
969
|
-
position: sticky; left: 0; z-index: 1;
|
|
970
|
-
}
|
|
971
|
-
.planilha td.num { text-align: right; font-variant-numeric: tabular-nums; }
|
|
972
|
-
.planilha td.total { font-weight: 680; color: var(--c-tom); }
|
|
973
|
-
.planilha td.alto { background: color-mix(in srgb, #2fbf7f 20%, transparent); }
|
|
974
|
-
.planilha td.baixo { background: color-mix(in srgb, #ff5a36 20%, transparent); }
|
|
975
|
-
.planilha td.sel { outline: 2px solid var(--c-tom); outline-offset: -2px; }
|
|
976
|
-
.planilha td[contenteditable]:focus { outline: 2px solid var(--c-tom); outline-offset: -2px; }
|
|
977
|
-
|
|
978
|
-
/* ------------------------------------------------------------ impressão -- */
|
|
979
|
-
|
|
980
|
-
@media print {
|
|
981
|
-
body { background: #fff; overflow: visible; }
|
|
982
|
-
.topo, .trilho, .painel, .inspetor, .palco-barra, .tempo, .aviso { display: none !important; }
|
|
983
|
-
.palco-wrap { padding: 0; display: block; overflow: visible; }
|
|
984
|
-
.palco { box-shadow: none; border-radius: 0; }
|
|
985
|
-
.cena {
|
|
986
|
-
page-break-after: always; break-after: page;
|
|
987
|
-
-webkit-print-color-adjust: exact; print-color-adjust: exact;
|
|
988
|
-
}
|
|
989
|
-
.cena .el { animation: none !important; opacity: 1 !important; }
|
|
990
|
-
.folha-doc { padding: 0; width: auto; min-height: 0; }
|
|
991
|
-
}
|
|
992
|
-
|
|
993
|
-
/* ══════════════════════════════════════════════════════════════════════════
|
|
994
|
-
Objetos 3D
|
|
995
|
-
|
|
996
|
-
Perspectiva de verdade, com transform 3D do navegador. Sem WebGL e sem
|
|
997
|
-
biblioteca — o Studio não tem dependência e não vai passar a ter por isto.
|
|
998
|
-
═════════════════════════════════════════════════════════════════════════ */
|
|
999
|
-
.el.obj3d { display: grid; place-items: center; }
|
|
1000
|
-
.corpo3d {
|
|
1001
|
-
position: relative;
|
|
1002
|
-
transform-style: preserve-3d;
|
|
1003
|
-
transform: rotateX(-14deg) rotateY(-28deg);
|
|
1004
|
-
}
|
|
1005
|
-
.face3d {
|
|
1006
|
-
/* Sem isto a borda e o padding SOMAM ao tamanho pedido: cada face fica
|
|
1007
|
-
maior do que a medida usada no translateZ, e o cubo não fecha — as
|
|
1008
|
-
faces ficam soltas, com fresta. O render.css é usado sozinho no HTML
|
|
1009
|
-
exportado, então não dá para contar com o reset do core.css. */
|
|
1010
|
-
box-sizing: border-box;
|
|
1011
|
-
position: absolute; inset: 0;
|
|
1012
|
-
display: grid; place-items: center;
|
|
1013
|
-
background: var(--c-tom, #ff5a36);
|
|
1014
|
-
color: #fff;
|
|
1015
|
-
font: 700 clamp(14px, 2.2vw, 40px)/1.15 var(--f-display, inherit);
|
|
1016
|
-
text-align: center;
|
|
1017
|
-
padding: 6%;
|
|
1018
|
-
border: 1px solid rgba(255, 255, 255, .16);
|
|
1019
|
-
border-radius: 6px;
|
|
1020
|
-
box-shadow: inset 0 0 90px rgba(0, 0, 0, .34);
|
|
1021
|
-
backface-visibility: visible;
|
|
1022
|
-
overflow: hidden;
|
|
1023
|
-
}
|
|
1024
|
-
.face3d img { width: 100%; height: 100%; object-fit: cover; display: block; }
|
|
1025
|
-
/* cada face pega uma luz diferente, senão o cubo vira uma mancha só */
|
|
1026
|
-
.face3d:nth-child(2) { filter: brightness(.78); }
|
|
1027
|
-
.face3d:nth-child(3) { filter: brightness(.88); }
|
|
1028
|
-
.face3d:nth-child(4) { filter: brightness(.7); }
|
|
1029
|
-
.face3d:nth-child(5) { filter: brightness(1.1); }
|
|
1030
|
-
.face3d:nth-child(6) { filter: brightness(.6); }
|
|
1031
|
-
|
|
1032
|
-
@keyframes giro3d {
|
|
1033
|
-
from { transform: rotateX(var(--inc, -14deg)) rotateY(0deg); }
|
|
1034
|
-
to { transform: rotateX(var(--inc, -14deg)) rotateY(360deg); }
|
|
1035
|
-
}
|
|
1036
|
-
|
|
1037
|
-
/* painel: sem moldura, é uma superfície flutuando em profundidade */
|
|
1038
|
-
.el.obj3d.f-painel .face3d { border: 0; box-shadow: 0 40px 90px -30px rgba(0,0,0,.7); }
|
|
1039
|
-
|
|
1040
|
-
/* O lado do aparelho não é o lado da imagem: a imagem sangra até a borda, o
|
|
1041
|
-
celular precisa de ar em volta para a moldura e a sombra aparecerem. */
|
|
1042
|
-
.cena .fluxo .lado-imagem.com-aparelho {
|
|
1043
|
-
display: grid; place-items: center; min-height: 0; overflow: visible;
|
|
1044
|
-
}
|
|
1045
|
-
.cena .fluxo .lado-imagem.com-aparelho > .el { max-height: 100%; }
|
|
1046
|
-
|
|
1047
|
-
/* ══ O KIT DE ANÚNCIO ═══════════════════════════════════════════════════════
|
|
1048
|
-
Nasceu de um vídeo de referência mandado pelo dono — um comercial de
|
|
1049
|
-
fintech — com uma frase só: "ainda não tá bom, tá genérico. Quero nesse
|
|
1050
|
-
nível." Medindo a peça de hoje contra aquela, o que faltava não era tema
|
|
1051
|
-
nem cor (tema claro e `marca.cor` já existiam): era o PRODUTO.
|
|
1052
|
-
══════════════════════════════════════════════════════════════════════════ */
|
|
1053
|
-
|
|
1054
|
-
/* ── cartão ───────────────────────────────────────────────────────────────
|
|
1055
|
-
A proporção é a de verdade (85,6 × 54 mm = 1,586). Ela importa mais que o
|
|
1056
|
-
desenho: um retângulo na proporção errada não é lido como cartão por mais
|
|
1057
|
-
chip que tenha. */
|
|
1058
|
-
.el.cartao {
|
|
1059
|
-
--cc: var(--c-tom);
|
|
1060
|
-
width: min(100%, 620px);
|
|
1061
|
-
perspective: 1400px;
|
|
1062
|
-
}
|
|
1063
|
-
.el.cartao .cartao-corpo {
|
|
1064
|
-
position: relative;
|
|
1065
|
-
aspect-ratio: 1.586;
|
|
1066
|
-
border-radius: 6.2%;
|
|
1067
|
-
padding: 7% 7.5%;
|
|
1068
|
-
display: flex; flex-direction: column; justify-content: space-between;
|
|
1069
|
-
color: #fff;
|
|
1070
|
-
/* Duas fontes de luz e uma sombra longa: é o que separa "objeto pousado na
|
|
1071
|
-
cena" de "retângulo colado por cima". */
|
|
1072
|
-
background:
|
|
1073
|
-
radial-gradient(120% 140% at 12% 4%, rgba(255, 255, 255, .30), transparent 52%),
|
|
1074
|
-
linear-gradient(145deg,
|
|
1075
|
-
color-mix(in srgb, var(--cc) 88%, #fff),
|
|
1076
|
-
var(--cc) 46%,
|
|
1077
|
-
color-mix(in srgb, var(--cc) 72%, #000) 100%);
|
|
1078
|
-
box-shadow:
|
|
1079
|
-
inset 0 1px 0 rgba(255, 255, 255, .38),
|
|
1080
|
-
inset 0 -1px 0 rgba(0, 0, 0, .22),
|
|
1081
|
-
0 2.2% 5% -1% rgba(0, 0, 0, .45);
|
|
1082
|
-
transform: rotate(-1.6deg);
|
|
1083
|
-
}
|
|
1084
|
-
/* O reflexo diagonal. Sem ele o plástico vira papel colorido. */
|
|
1085
|
-
.el.cartao .cartao-brilho {
|
|
1086
|
-
position: absolute; inset: 0; border-radius: inherit; pointer-events: none;
|
|
1087
|
-
background: linear-gradient(102deg, transparent 34%, rgba(255, 255, 255, .20) 46%,
|
|
1088
|
-
rgba(255, 255, 255, .05) 54%, transparent 62%);
|
|
1089
|
-
}
|
|
1090
|
-
.el.cartao .cartao-topo {
|
|
1091
|
-
display: flex; align-items: baseline; justify-content: space-between; gap: 1em;
|
|
1092
|
-
}
|
|
1093
|
-
.el.cartao .cartao-marca {
|
|
1094
|
-
font-weight: 800; font-size: 6.4cqw; letter-spacing: -.01em;
|
|
1095
|
-
}
|
|
1096
|
-
.el.cartao .cartao-variante {
|
|
1097
|
-
font-size: 3.4cqw; letter-spacing: .18em; text-transform: uppercase;
|
|
1098
|
-
opacity: .82; font-weight: 600;
|
|
1099
|
-
}
|
|
1100
|
-
.el.cartao .cartao-meio { display: flex; align-items: center; gap: 4%; }
|
|
1101
|
-
/* O chip: dourado, com os contatos. É o detalhe que mais faz o desenho ser
|
|
1102
|
-
reconhecido — some ele e sobra um cartão de visita. */
|
|
1103
|
-
.el.cartao .cartao-chip {
|
|
1104
|
-
width: 13%; aspect-ratio: 1.32; border-radius: 14%;
|
|
1105
|
-
background: linear-gradient(150deg, #f7e3a1, #d9b558 46%, #b8912f);
|
|
1106
|
-
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .18);
|
|
1107
|
-
position: relative; flex: none;
|
|
1108
|
-
}
|
|
1109
|
-
.el.cartao .cartao-chip::before,
|
|
1110
|
-
.el.cartao .cartao-chip::after {
|
|
1111
|
-
content: ""; position: absolute; left: 12%; right: 12%; height: 1px;
|
|
1112
|
-
background: rgba(0, 0, 0, .28);
|
|
1113
|
-
}
|
|
1114
|
-
.el.cartao .cartao-chip::before { top: 36%; }
|
|
1115
|
-
.el.cartao .cartao-chip::after { top: 64%; }
|
|
1116
|
-
.el.cartao .cartao-onda { width: 7%; opacity: .9; display: block; flex: none; }
|
|
1117
|
-
.el.cartao .cartao-onda svg { width: 100%; height: auto; display: block; }
|
|
1118
|
-
.el.cartao .cartao-numero {
|
|
1119
|
-
font-family: var(--f-mono);
|
|
1120
|
-
font-size: 5.6cqw; letter-spacing: .06em; opacity: .95;
|
|
1121
|
-
}
|
|
1122
|
-
.el.cartao .cartao-pe {
|
|
1123
|
-
display: flex; justify-content: space-between; gap: 1em;
|
|
1124
|
-
font-size: 3.1cqw; letter-spacing: .13em; text-transform: uppercase;
|
|
1125
|
-
opacity: .8; font-weight: 600;
|
|
1126
|
-
}
|
|
1127
|
-
/* As medidas de dentro são `cqw` — por cento da LARGURA DO CARTÃO, não da
|
|
1128
|
-
tela. Sem o contexto de contêiner o mesmo cartão sai com o chip do tamanho
|
|
1129
|
-
de uma unha na vitrine e do tamanho de uma caixa na cena cheia. */
|
|
1130
|
-
.el.cartao .cartao-corpo { container-type: inline-size; }
|
|
1131
|
-
|
|
1132
|
-
.el.cartao[data-face="verso"] .cartao-corpo { transform: rotate(1.6deg); }
|
|
1133
|
-
.el.cartao[data-mov="flutuar"] .cartao-corpo { animation: cartao-flutua 6s ease-in-out infinite; }
|
|
1134
|
-
.el.cartao[data-mov="girar"] .cartao-corpo { animation: cartao-gira 9s ease-in-out infinite; }
|
|
1135
|
-
@keyframes cartao-flutua {
|
|
1136
|
-
0%, 100% { transform: rotate(-1.6deg) translateY(0); }
|
|
1137
|
-
50% { transform: rotate(-.6deg) translateY(-2.2%); }
|
|
1138
|
-
}
|
|
1139
|
-
@keyframes cartao-gira {
|
|
1140
|
-
0%, 100% { transform: rotate(-1.6deg) rotateY(-16deg); }
|
|
1141
|
-
50% { transform: rotate(-1.6deg) rotateY(16deg); }
|
|
1142
|
-
}
|
|
1143
|
-
@media (prefers-reduced-motion: reduce) {
|
|
1144
|
-
.el.cartao .cartao-corpo { animation: none; }
|
|
1145
|
-
}
|
|
1146
|
-
|
|
1147
|
-
/* ── a tela do app ────────────────────────────────────────────────────────
|
|
1148
|
-
Vale sozinha na cena e vale dentro do `dispositivo`. É o mesmo elemento de
|
|
1149
|
-
propósito: com dois, o print da campanha e a tela do celular divergiriam na
|
|
1150
|
-
primeira mudança. */
|
|
1151
|
-
.el.app {
|
|
1152
|
-
width: 100%;
|
|
1153
|
-
font-size: calc(var(--u, 10px) * 3.4);
|
|
1154
|
-
display: flex; flex-direction: column; gap: 4%;
|
|
1155
|
-
text-align: left;
|
|
1156
|
-
background: #fff; color: #10161d;
|
|
1157
|
-
border-radius: 22px; padding: 7% 6.5%;
|
|
1158
|
-
box-shadow: 0 18px 50px rgba(0, 0, 0, .16);
|
|
1159
|
-
}
|
|
1160
|
-
.el.app[data-escuro] { background: #0e1319; color: #eaf0f6; box-shadow: none; }
|
|
1161
|
-
.el.app .app-topo {
|
|
1162
|
-
display: flex; align-items: center; justify-content: space-between;
|
|
1163
|
-
font-size: .62em; font-weight: 700; opacity: .75;
|
|
1164
|
-
}
|
|
1165
|
-
.el.app .app-topo i {
|
|
1166
|
-
width: 2.2em; height: .34em; border-radius: 999px;
|
|
1167
|
-
background: currentColor; opacity: .25; display: block;
|
|
1168
|
-
}
|
|
1169
|
-
.el.app .app-valor { display: flex; flex-direction: column; gap: .12em; }
|
|
1170
|
-
.el.app .app-valor small { font-size: .5em; opacity: .6; font-weight: 600; }
|
|
1171
|
-
.el.app .app-valor strong {
|
|
1172
|
-
font-size: 1.5em; font-weight: 800; letter-spacing: -.02em;
|
|
1173
|
-
font-variant-numeric: tabular-nums;
|
|
1174
|
-
}
|
|
1175
|
-
.el.app .app-linhas { display: flex; flex-direction: column; }
|
|
1176
|
-
/* O FIO entre as linhas é o que faz o olho ler "extrato". Sem ele são frases
|
|
1177
|
-
empilhadas, que é como a tela saía antes. */
|
|
1178
|
-
.el.app .app-linha {
|
|
1179
|
-
display: flex; align-items: center; justify-content: space-between; gap: 1em;
|
|
1180
|
-
padding: .62em 0; font-size: .56em;
|
|
1181
|
-
border-top: 1px solid color-mix(in srgb, currentColor 14%, transparent);
|
|
1182
|
-
}
|
|
1183
|
-
.el.app .app-linha:first-child { border-top: 0; }
|
|
1184
|
-
.el.app .app-linha span { opacity: .82; }
|
|
1185
|
-
.el.app .app-linha b { font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
1186
|
-
.el.app .app-botao {
|
|
1187
|
-
margin-top: auto;
|
|
1188
|
-
background: var(--c-tom); color: #fff;
|
|
1189
|
-
border-radius: 999px; padding: .78em 1em;
|
|
1190
|
-
text-align: center; font-weight: 700; font-size: .58em;
|
|
1191
|
-
}
|
|
1192
|
-
|
|
1193
|
-
/* Dentro do aparelho a tela do app OCUPA o vidro: com o padrão do
|
|
1194
|
-
`dispositivo` (conteúdo centrado com folga) ela ficava boiando no meio, e o
|
|
1195
|
-
que se vê num celular de verdade é a tela cheia. */
|
|
1196
|
-
.el.dispositivo .tela { justify-content: flex-start; }
|
|
1197
|
-
.el.dispositivo .tela > .el.app {
|
|
1198
|
-
flex: 1; border-radius: 0; box-shadow: none;
|
|
1199
|
-
margin: -26px -20px; padding: 34px 22px 26px;
|
|
1200
|
-
background: transparent; color: var(--c-texto);
|
|
1201
|
-
}
|
|
1202
|
-
|
|
1203
|
-
/* ── vitrine ──────────────────────────────────────────────────────────────
|
|
1204
|
-
A linha de produtos com um escolhido. O item atual vem à frente; os outros
|
|
1205
|
-
recuam — sem isso são quatro cartões do mesmo tamanho e ninguém sabe qual
|
|
1206
|
-
está sendo oferecido. */
|
|
1207
|
-
.el.vitrine {
|
|
1208
|
-
width: 100%; font-size: calc(var(--u, 10px) * 3.4);
|
|
1209
|
-
display: flex; flex-direction: column; gap: 1.2em;
|
|
1210
|
-
}
|
|
1211
|
-
.el.vitrine .vitrine-titulo {
|
|
1212
|
-
text-align: center; font-size: .62em; font-weight: 700;
|
|
1213
|
-
letter-spacing: .04em; opacity: .82;
|
|
1214
|
-
}
|
|
1215
|
-
.el.vitrine .vitrine-fila {
|
|
1216
|
-
display: flex; align-items: center; justify-content: center; gap: 2.2%;
|
|
1217
|
-
}
|
|
1218
|
-
.el.vitrine .vitrine-item {
|
|
1219
|
-
flex: 1 1 0; min-width: 0;
|
|
1220
|
-
display: flex; flex-direction: column; align-items: center; gap: .5em;
|
|
1221
|
-
/* Recuado, não apagado: a .42 sobre fundo escuro os outros cartões somem, e
|
|
1222
|
-
uma vitrine com um produto só não é vitrine. */
|
|
1223
|
-
opacity: .58; transform: scale(.86);
|
|
1224
|
-
transition: opacity .4s ease, transform .4s ease;
|
|
1225
|
-
}
|
|
1226
|
-
.el.vitrine .vitrine-item.atual { opacity: 1; transform: scale(1.06); z-index: 2; }
|
|
1227
|
-
.el.vitrine .vitrine-item small {
|
|
1228
|
-
font-size: .42em; opacity: .75; text-align: center; font-weight: 600;
|
|
1229
|
-
}
|
|
1230
|
-
.el.vitrine .el.cartao { width: 100%; }
|
|
1231
|
-
|
|
1232
|
-
/* ── assinatura ───────────────────────────────────────────────────────────
|
|
1233
|
-
O fim do anúncio: o logo sozinho, grande, sobre a cor da casa. Ela toma a
|
|
1234
|
-
cena INTEIRA porque é isso que uma assinatura é — se dividisse espaço com
|
|
1235
|
-
outra coisa, seria mais um bloco em vez do ponto final. */
|
|
1236
|
-
.el.assinatura {
|
|
1237
|
-
position: absolute; inset: 0; z-index: 4;
|
|
1238
|
-
font-size: calc(var(--u, 10px) * 3);
|
|
1239
|
-
display: flex; flex-direction: column; align-items: center; justify-content: center;
|
|
1240
|
-
gap: .5em; text-align: center; padding: 8%;
|
|
1241
|
-
}
|
|
1242
|
-
.el.assinatura[data-sobre="marca"] { background: var(--c-tom); color: #fff; }
|
|
1243
|
-
.el.assinatura[data-sobre="claro"] { background: #fff; color: #10161d; }
|
|
1244
|
-
.el.assinatura[data-sobre="escuro"] { background: #080b0e; color: #fff; }
|
|
1245
|
-
.el.assinatura .assinatura-logo { width: min(52%, 520px); height: auto; display: block; }
|
|
1246
|
-
.el.assinatura .assinatura-nome {
|
|
1247
|
-
font-size: 3.6em; font-weight: 800; letter-spacing: -.03em; line-height: 1;
|
|
1248
|
-
}
|
|
1249
|
-
.el.assinatura .assinatura-frase { font-size: .62em; opacity: .82; letter-spacing: .02em; }
|
|
1250
|
-
|
|
1251
|
-
/* Título de anúncio quebra EQUILIBRADO. "Um cartão. Seu jeito." saía em
|
|
1252
|
-
quatro linhas — três palavras e um órfão —, e é assim que uma frase curta
|
|
1253
|
-
vira um bloco desengonçado no meio do quadro. */
|
|
1254
|
-
.el.texto.titulo, .el.texto[data-papel="titulo"] { text-wrap: balance; }
|
|
1255
|
-
|
|
1256
|
-
/* ═══════════════════════════════════════════════════════════════════════
|
|
1257
|
-
A COMPOSIÇÃO DE SLIDE (ver comporCabecaCorpo, em render.js).
|
|
1258
|
-
|
|
1259
|
-
Cabeça ancorada em cima, corpo centrado no que sobra — e o corpo em escala
|
|
1260
|
-
de PROJETOR. Os tamanhos de antes (lista 34px, cartão 27/19, tabela 22)
|
|
1261
|
-
foram calibrados para caber; num quadro de 1920 projetado numa sala eles
|
|
1262
|
-
somem, e o que sobra é o vazio em volta. Só dentro desta composição: a cena
|
|
1263
|
-
de vídeo com um título sozinho, e a capa, continuam como eram.
|
|
1264
|
-
═══════════════════════════════════════════════════════════════════════ */
|
|
1265
|
-
|
|
1266
|
-
.cena .fluxo[data-composicao="cabeca-corpo"] { justify-content: flex-start; }
|
|
1267
|
-
.cena .fluxo[data-composicao="cabeca-corpo"] > .corpo-inicio { margin-top: auto; }
|
|
1268
|
-
.cena .fluxo[data-composicao="cabeca-corpo"] > .corpo-fim { margin-bottom: auto; }
|
|
1269
|
-
/* O título respira antes do corpo; o chapéu cola no título. */
|
|
1270
|
-
.cena .fluxo[data-composicao="cabeca-corpo"] > .el.txt.titulo { margin-bottom: calc(var(--u, 19px) * .4); }
|
|
1271
|
-
.cena .fluxo[data-composicao="cabeca-corpo"] > .el.txt.chapeu { margin-bottom: calc(var(--u, 19px) * -.9); }
|
|
1272
|
-
|
|
1273
|
-
.cena .fluxo[data-composicao="cabeca-corpo"] .el.lista { gap: calc(24px * var(--esc, 1)); }
|
|
1274
|
-
.cena .fluxo[data-composicao="cabeca-corpo"] .el.lista .item {
|
|
1275
|
-
font-size: calc(40px * var(--esc, 1));
|
|
1276
|
-
line-height: 1.38;
|
|
1277
|
-
padding-left: calc(50px * var(--esc, 1));
|
|
1278
|
-
}
|
|
1279
|
-
.cena .fluxo[data-composicao="cabeca-corpo"] .el.lista .item::before { width: 14px; height: 14px; top: .56em; }
|
|
1280
|
-
|
|
1281
|
-
.cena .fluxo[data-composicao="cabeca-corpo"] .el.cartoes { gap: 28px; }
|
|
1282
|
-
.cena .fluxo[data-composicao="cabeca-corpo"] .el.cartoes .cartao {
|
|
1283
|
-
padding: 40px 42px;
|
|
1284
|
-
min-height: calc(var(--alto, 1080px) * .27);
|
|
1285
|
-
gap: 14px;
|
|
1286
|
-
border-radius: 24px;
|
|
1287
|
-
}
|
|
1288
|
-
.cena .fluxo[data-composicao="cabeca-corpo"] .el.cartoes .cartao b { font-size: 36px; line-height: 1.15; }
|
|
1289
|
-
.cena .fluxo[data-composicao="cabeca-corpo"] .el.cartoes .cartao span { font-size: 25px; line-height: 1.45; }
|
|
1290
|
-
|
|
1291
|
-
.cena .fluxo[data-composicao="cabeca-corpo"] .el.numeros { gap: calc(40px * var(--esc, 1)); }
|
|
1292
|
-
.cena .fluxo[data-composicao="cabeca-corpo"] .el.numeros .num { gap: 14px; }
|
|
1293
|
-
.cena .fluxo[data-composicao="cabeca-corpo"] .el.numeros .num b { font-size: var(--tam-num, calc(140px * var(--esc, 1))); }
|
|
1294
|
-
.cena .fluxo[data-composicao="cabeca-corpo"] .el.numeros .num span { font-size: calc(27px * var(--esc, 1)); }
|
|
1295
|
-
|
|
1296
|
-
.cena .fluxo[data-composicao="cabeca-corpo"] .el.tabela table { font-size: 29px; }
|
|
1297
|
-
.cena .fluxo[data-composicao="cabeca-corpo"] .el.tabela th,
|
|
1298
|
-
.cena .fluxo[data-composicao="cabeca-corpo"] .el.tabela td { padding: 22px 24px; }
|
|
1299
|
-
.cena .fluxo[data-composicao="cabeca-corpo"] .el.tabela th { font-size: 18px; }
|
|
1300
|
-
|
|
1301
|
-
.cena .fluxo[data-composicao="cabeca-corpo"] .el.codigo { font-size: 26px; }
|
|
1302
|
-
|
|
1303
|
-
/* O rodapé da apresentação: nome do deck e "03 / 08". Discreto — é âncora,
|
|
1304
|
-
não conteúdo. */
|
|
1305
|
-
.cena .rodape {
|
|
1306
|
-
position: absolute;
|
|
1307
|
-
z-index: 2;
|
|
1308
|
-
display: flex;
|
|
1309
|
-
justify-content: space-between;
|
|
1310
|
-
align-items: baseline;
|
|
1311
|
-
gap: 24px;
|
|
1312
|
-
font-family: var(--f-corpo);
|
|
1313
|
-
font-size: calc(var(--u, 19px) * .95);
|
|
1314
|
-
letter-spacing: .04em;
|
|
1315
|
-
color: var(--c-fraco);
|
|
1316
|
-
opacity: .82;
|
|
1317
|
-
pointer-events: none;
|
|
1318
|
-
white-space: nowrap;
|
|
1319
|
-
}
|
|
1320
|
-
.cena .rodape span:first-child { overflow: hidden; text-overflow: ellipsis; min-width: 0; }
|
|
1321
|
-
.cena .rodape span:last-child { font-variant-numeric: tabular-nums; }
|
|
1322
|
-
|
|
1323
|
-
/* Os números grandes NÃO quebram: coluna do tamanho do conteúdo, distribuídas.
|
|
1324
|
-
Com três colunas iguais de um terço, "R$ 200 bi" a 140px partia em duas
|
|
1325
|
-
linhas — o `!important` existe porque o render escreve `repeat(n, 1fr)`
|
|
1326
|
-
inline, e é justamente isso que se troca aqui. */
|
|
1327
|
-
.cena .fluxo[data-composicao="cabeca-corpo"] .el.numeros {
|
|
1328
|
-
grid-template-columns: none !important;
|
|
1329
|
-
grid-auto-flow: column;
|
|
1330
|
-
grid-auto-columns: max-content;
|
|
1331
|
-
justify-content: space-between;
|
|
1332
|
-
column-gap: calc(var(--u, 19px) * 3);
|
|
1333
|
-
}
|
|
1334
|
-
.cena .fluxo[data-composicao="cabeca-corpo"] .el.numeros .num b { white-space: nowrap; }
|
|
1335
|
-
|
|
1336
|
-
/* ─────────────────────────────────────────────────────────── câmera ────
|
|
1337
|
-
O palco é o conteúdo da cena; a câmera anima ele. O FUNDO fica na raiz
|
|
1338
|
-
de propósito: o quadro anda sobre o fundo, como faz uma câmera, em vez
|
|
1339
|
-
de arrastar tudo junto — é daí que vem a profundidade sem custo.
|
|
1340
|
-
|
|
1341
|
-
`inset: 0` repete a geometria que o `.fluxo` já tinha, para o embrulho
|
|
1342
|
-
não mudar uma única posição de elemento quando a cena não tem câmera. */
|
|
1343
|
-
.cena > .palco {
|
|
1344
|
-
position: absolute;
|
|
1345
|
-
inset: 0;
|
|
1346
|
-
z-index: 1;
|
|
1347
|
-
transform-origin: 50% 50%;
|
|
1348
|
-
will-change: transform;
|
|
1349
|
-
}
|
|
1350
|
-
/* O embrulho de paralaxe só existe em volta de elemento posicionado, e
|
|
1351
|
-
herda a caixa dele — ver o comentário em render.js. */
|
|
1352
|
-
.cena .paralaxe { transform-origin: 50% 50%; will-change: transform; }
|