sagadeck 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +305 -0
  3. package/SKILL.md +148 -0
  4. package/bin/sagadeck.js +511 -0
  5. package/docs/ANDAMENTO.md +1255 -0
  6. package/docs/EXPERIENCIAS.md +39 -0
  7. package/docs/PLANO-EXPERIENCIAS.md +39 -0
  8. package/docs/PLANO-TESTE-AULAS-TECNICAS.md +44 -0
  9. package/docs/PLANO-TESTE-DESINFORMACAO.md +38 -0
  10. package/docs/REFERENCIA.md +1131 -0
  11. package/package.json +59 -0
  12. package/src/adaptive-layouts.js +18 -0
  13. package/src/ai/art-direction.js +8 -0
  14. package/src/ai/commands.js +130 -0
  15. package/src/ai/context.js +245 -0
  16. package/src/ai/deck-ai.js +1135 -0
  17. package/src/ai/directions.js +74 -0
  18. package/src/ai/document-materials.js +49 -0
  19. package/src/ai/document-visuals.js +215 -0
  20. package/src/ai/evaluation.js +31 -0
  21. package/src/ai/ground.js +55 -0
  22. package/src/ai/llm.js +292 -0
  23. package/src/ai/quality.js +51 -0
  24. package/src/ai/relay.js +45 -0
  25. package/src/ai/staged-generation.js +24 -0
  26. package/src/ai/transform.js +858 -0
  27. package/src/ai/usage.js +17 -0
  28. package/src/ai/variety.js +80 -0
  29. package/src/ai/video-frames.js +24 -0
  30. package/src/ai/video-generation.js +126 -0
  31. package/src/ai/web-operation.js +31 -0
  32. package/src/algo-catalog.js +153 -0
  33. package/src/algo-trace.js +139 -0
  34. package/src/api-client.js +514 -0
  35. package/src/api-collections.js +14 -0
  36. package/src/api-demo.js +222 -0
  37. package/src/aspect.js +40 -0
  38. package/src/build.js +323 -0
  39. package/src/carousel.js +56 -0
  40. package/src/chrome.js +65 -0
  41. package/src/code-highlight.js +68 -0
  42. package/src/code-lab-browser.js +22 -0
  43. package/src/code-lab.js +3 -0
  44. package/src/code-language.js +52 -0
  45. package/src/csv.js +74 -0
  46. package/src/decision-lab.js +20 -0
  47. package/src/deck-file.js +119 -0
  48. package/src/diagram/napkin-examples.js +13 -0
  49. package/src/diagram/napkin.js +539 -0
  50. package/src/docx.js +128 -0
  51. package/src/dynamics/git-sim.js +200 -0
  52. package/src/dynamics/layouts.js +112 -0
  53. package/src/elements.js +554 -0
  54. package/src/experiences.js +124 -0
  55. package/src/exploration.js +31 -0
  56. package/src/export/browser.js +53 -0
  57. package/src/export/estudo.js +67 -0
  58. package/src/export/pptx.js +475 -0
  59. package/src/export/roteiro.js +40 -0
  60. package/src/export/shots.js +182 -0
  61. package/src/figures/charts.js +383 -0
  62. package/src/figures/diagrams.js +117 -0
  63. package/src/figures/icons.js +166 -0
  64. package/src/figures/material-pictos.js +20 -0
  65. package/src/figures/pictos.js +255 -0
  66. package/src/figures/points.js +106 -0
  67. package/src/figures/qr.js +29 -0
  68. package/src/figures/ufmap.js +48 -0
  69. package/src/fiscal/autofix.js +377 -0
  70. package/src/fiscal/normalize.js +115 -0
  71. package/src/graph-lab.js +24 -0
  72. package/src/hologram.js +30 -0
  73. package/src/identity.js +86 -0
  74. package/src/import/crop.js +59 -0
  75. package/src/import/index.js +132 -0
  76. package/src/import/legacy-word.js +42 -0
  77. package/src/import/merge.js +45 -0
  78. package/src/import/office.js +123 -0
  79. package/src/import/omml.js +69 -0
  80. package/src/import/pdf-render.js +56 -0
  81. package/src/import/pptx.js +701 -0
  82. package/src/import/xml.js +42 -0
  83. package/src/infographic.js +401 -0
  84. package/src/layouts.js +723 -0
  85. package/src/lessons.js +171 -0
  86. package/src/library.js +399 -0
  87. package/src/markup.js +116 -0
  88. package/src/master.js +214 -0
  89. package/src/mcp/server.js +371 -0
  90. package/src/meeting.js +42 -0
  91. package/src/motion.js +56 -0
  92. package/src/package.js +116 -0
  93. package/src/playground.js +19 -0
  94. package/src/portal-scene.js +20 -0
  95. package/src/preferences.js +61 -0
  96. package/src/protect.js +51 -0
  97. package/src/purpose.js +24 -0
  98. package/src/pytrace.js +1092 -0
  99. package/src/research/duckduckgo.js +73 -0
  100. package/src/research/research.js +202 -0
  101. package/src/research/svg-image.js +17 -0
  102. package/src/research/visuals.js +52 -0
  103. package/src/runtime/api-collection-ui.js +5 -0
  104. package/src/runtime/api-collections.js +28 -0
  105. package/src/runtime/api-core.js +530 -0
  106. package/src/runtime/api-ui.js +966 -0
  107. package/src/runtime/base.css +1774 -0
  108. package/src/runtime/calc.js +139 -0
  109. package/src/runtime/code-lab.js +371 -0
  110. package/src/runtime/decision-lab.js +49 -0
  111. package/src/runtime/diagram.js +341 -0
  112. package/src/runtime/fit.js +268 -0
  113. package/src/runtime/fonts/caveat.css +2 -0
  114. package/src/runtime/fonts/comic-neue.css +3 -0
  115. package/src/runtime/fonts/fredoka.css +2 -0
  116. package/src/runtime/fonts/index.json +10 -0
  117. package/src/runtime/fonts/inter.css +2 -0
  118. package/src/runtime/fonts/patrick-hand.css +2 -0
  119. package/src/runtime/fonts/plus-jakarta-sans.css +2 -0
  120. package/src/runtime/fonts/press-start-2p.css +2 -0
  121. package/src/runtime/fonts/vt323.css +2 -0
  122. package/src/runtime/formula.js +148 -0
  123. package/src/runtime/graph-lab.js +72 -0
  124. package/src/runtime/meeting.css +7 -0
  125. package/src/runtime/meeting.js +10 -0
  126. package/src/runtime/motion.js +15 -0
  127. package/src/runtime/playground.js +11 -0
  128. package/src/runtime/points.js +19 -0
  129. package/src/runtime/portal-scene.css +6 -0
  130. package/src/runtime/portal-scene.js +22 -0
  131. package/src/runtime/runtime.js +827 -0
  132. package/src/runtime/science.js +89 -0
  133. package/src/runtime/skins/aluminio.css +31 -0
  134. package/src/runtime/skins/arcade.css +25 -0
  135. package/src/runtime/skins/aurora.css +17 -0
  136. package/src/runtime/skins/bauhaus.css +19 -0
  137. package/src/runtime/skins/editorial.css +19 -0
  138. package/src/runtime/skins/jornal.css +17 -0
  139. package/src/runtime/skins/manual-noite.css +14 -0
  140. package/src/runtime/skins/manual.css +14 -0
  141. package/src/runtime/skins/noite.css +21 -0
  142. package/src/runtime/skins/oceano.css +17 -0
  143. package/src/runtime/skins/pop.css +23 -0
  144. package/src/runtime/skins/prata.css +18 -0
  145. package/src/runtime/skins/prisma.css +28 -0
  146. package/src/runtime/skins/rabisco.css +18 -0
  147. package/src/runtime/skins/relevo.css +33 -0
  148. package/src/runtime/skins/sinal.css +16 -0
  149. package/src/runtime/skins/terminal.css +23 -0
  150. package/src/runtime/vendor/KATEX-LICENSE.txt +21 -0
  151. package/src/runtime/vendor/MERMAID-LICENSE.txt +21 -0
  152. package/src/runtime/vendor/PLOTLY-LICENSE.txt +21 -0
  153. package/src/runtime/vendor/katex.css +1 -0
  154. package/src/runtime/vendor/mermaid.min.js +3636 -0
  155. package/src/runtime/vendor/plotly.min.js +3620 -0
  156. package/src/runtime/video-player.js +35 -0
  157. package/src/science.js +162 -0
  158. package/src/studio/ai-response.js +36 -0
  159. package/src/studio/api-routes.js +152 -0
  160. package/src/studio/assets/contexto/leia-me.md +12 -0
  161. package/src/studio/assets/contexto/vendas.csv +7 -0
  162. package/src/studio/assets/imagens/colecao-arquitetura.png +0 -0
  163. package/src/studio/assets/imagens/colecao-cor.png +0 -0
  164. package/src/studio/assets/imagens/colecao-equipe.png +0 -0
  165. package/src/studio/assets/imagens/lavanda-cover.jpg +0 -0
  166. package/src/studio/code-routes.js +32 -0
  167. package/src/studio/command-approval.js +48 -0
  168. package/src/studio/demo-decks.js +98 -0
  169. package/src/studio/direction-routes.js +29 -0
  170. package/src/studio/errors.js +65 -0
  171. package/src/studio/exploration-demo.js +17 -0
  172. package/src/studio/exporting.js +105 -0
  173. package/src/studio/generation-report.js +10 -0
  174. package/src/studio/instance.js +48 -0
  175. package/src/studio/layout-samples.js +152 -0
  176. package/src/studio/project.js +371 -0
  177. package/src/studio/public/api-collections.js +28 -0
  178. package/src/studio/public/app.js +5265 -0
  179. package/src/studio/public/art-preview.js +10 -0
  180. package/src/studio/public/calc-fields.js +11 -0
  181. package/src/studio/public/chat-progress.js +47 -0
  182. package/src/studio/public/developer-fields.js +22 -0
  183. package/src/studio/public/explorer.js +443 -0
  184. package/src/studio/public/history.js +58 -0
  185. package/src/studio/public/index.html +867 -0
  186. package/src/studio/public/inspector.js +270 -0
  187. package/src/studio/public/lab-fields.js +5 -0
  188. package/src/studio/public/library.css +275 -0
  189. package/src/studio/public/library.html +55 -0
  190. package/src/studio/public/library.js +471 -0
  191. package/src/studio/public/merge-decks.js +155 -0
  192. package/src/studio/public/review-ui.js +100 -0
  193. package/src/studio/public/screenshot-editor.js +140 -0
  194. package/src/studio/public/share-ui.js +72 -0
  195. package/src/studio/public/slide-clipboard.js +23 -0
  196. package/src/studio/public/slide-form.js +1263 -0
  197. package/src/studio/public/studio-awareness.js +154 -0
  198. package/src/studio/public/studio-next.css +303 -0
  199. package/src/studio/public/style.css +1262 -0
  200. package/src/studio/public/ui-icons.js +2 -0
  201. package/src/studio/public/viewers.js +372 -0
  202. package/src/studio/public/visual-editor.js +326 -0
  203. package/src/studio/public/workspace.js +18 -0
  204. package/src/studio/public-files.js +1 -0
  205. package/src/studio/request-helpers.js +41 -0
  206. package/src/studio/server.js +1583 -0
  207. package/src/studio/share-routes.js +146 -0
  208. package/src/studio/slide-copy-routes.js +26 -0
  209. package/src/studio/slide-copy.js +30 -0
  210. package/src/studio/snapshot.js +160 -0
  211. package/src/studio/style-routes.js +103 -0
  212. package/src/studio/template-collections.js +97 -0
  213. package/src/studio/versions.js +95 -0
  214. package/src/studio/video-download.js +29 -0
  215. package/src/studio/visual-keys.js +52 -0
  216. package/src/studio/workspaces.js +39 -0
  217. package/src/table.js +93 -0
  218. package/src/templates/scaffold.js +372 -0
  219. package/src/themes.js +604 -0
  220. package/src/trace-view.js +450 -0
  221. package/src/uid.js +19 -0
  222. package/src/video-player.js +40 -0
  223. package/src/visual-edits.js +99 -0
  224. package/src/ws.js +134 -0
  225. package/templates/cenario/Texto no cen/303/241rio.yaml" +171 -0
  226. package/templates/cenario/imagens/cidade.svg +30 -0
  227. package/templates/cenario/imagens/pessoa.svg +15 -0
  228. package/templates/cenario-e-ciencia.yaml +47 -0
  229. package/templates/ensaio-api.yaml +160 -0
  230. package/templates/exemplo-alegre.yaml +75 -0
  231. package/templates/exemplo-keynote.yaml +90 -0
  232. package/templates/exemplo-napkin.yaml +139 -0
  233. package/templates/exemplo.yaml +228 -0
@@ -0,0 +1,89 @@
1
+ (function () {
2
+ let loader;
3
+ function load() {
4
+ if (window.Plotly) return Promise.resolve();
5
+ return loader ||= new Promise((resolve,reject) => {
6
+ const script = document.createElement('script');
7
+ script.src = 'plotly.min.js'; script.onload = resolve;
8
+ script.onerror = () => { loader = null; script.remove(); reject(new Error('Não foi possível carregar o gráfico.')); };
9
+ document.head.append(script);
10
+ });
11
+ }
12
+ // cores do tema do slide (--s1..--s5) para as curvas; "em", "hi"… como no deck
13
+ function palette(p) {
14
+ const cs = getComputedStyle(p);
15
+ const pick = (n) => cs.getPropertyValue(`--${n}`).trim();
16
+ // Uma cor de preenchimento (hi) pode sumir como traço no mesmo tema.
17
+ const canvas = document.createElement('canvas').getContext('2d');
18
+ const rgb = color => {
19
+ const probe = document.createElement('i'); probe.style.color = color; p.append(probe);
20
+ canvas.fillStyle = getComputedStyle(probe).color; probe.remove();
21
+ canvas.clearRect(0, 0, 1, 1); canvas.fillRect(0, 0, 1, 1);
22
+ return [...canvas.getImageData(0, 0, 1, 1).data].slice(0, 3);
23
+ };
24
+ const luminance = c => c.map(v => v / 255).map(v => v <= .04045 ? v / 12.92 : ((v + .055) / 1.055) ** 2.4).reduce((s,v,i) => s + v * [.2126,.7152,.0722][i],0);
25
+ const bg = luminance(rgb(pick('bg') || '#fff'));
26
+ const readable = color => {
27
+ const source = rgb(color), target = bg > .4 ? 0 : 255;
28
+ for (let a = 0; a <= 1.01; a += .05) {
29
+ const c = source.map(v => Math.round(v * (1-a) + target * a));
30
+ const l = luminance(c);
31
+ if ((Math.max(l,bg)+.05)/(Math.min(l,bg)+.05) >= 3) return `rgb(${c.join(',')})`;
32
+ }
33
+ return target ? '#fff' : '#000';
34
+ };
35
+ return { series: [1, 2, 3, 4, 5].map((i) => readable(pick(`s${i}`) || ['#7760ed', '#e0672c', '#1b998b', '#c2185b', '#3d5a80'][i - 1])), named: (c) => readable(pick(c) || c) };
36
+ }
37
+ // fórmula -> traces: a mesma conta do motor (src/science.js), com os valores atuais dos controles
38
+ function formulaTraces(m, values, p) {
39
+ const F = window.SagaFormula, col = palette(p), out = [];
40
+ if (!m.surface) m.functions.forEach((f, i) => { // com superfície 3D, só ela (curva 2D e 3D juntas não combinam)
41
+ if (!f.ok) return;
42
+ const s = F.sample(F.compile(f.fn, ['x']), m.x, values, 400, m.xlog);
43
+ out.push({ type: 'scatter', mode: 'lines', name: f.name, x: s.x, y: s.y, line: { width: 4, dash: ['solid','dash','dot','dashdot'][i % 4], color: f.color ? col.named(f.color) : col.series[i % 5] } });
44
+ });
45
+ if (m.points && !m.surface) out.push({ type: 'scatter', mode: 'markers', name: m.points.name, x: m.points.x, y: m.points.y, marker: { size: 11, color: col.series[out.length % 5] } });
46
+ if (m.surface) {
47
+ const c = F.compile(m.surface, ['x', 'y']), n = 61, xs = Array.from({ length: n }, (_, i) => m.x[0] + ((m.x[1] - m.x[0]) * i) / (n - 1));
48
+ out.push({ type: 'surface', x: xs, y: xs, z: xs.map((y) => xs.map((x) => c.eval({ ...values, x, y }))), colorscale: 'Viridis', showscale: true });
49
+ }
50
+ return out;
51
+ }
52
+ const valuesOf = (p) => Object.fromEntries([...p.querySelectorAll('[data-param]')].map((i) => [i.dataset.param, Number(i.value)]));
53
+ async function mount(root = document) {
54
+ const plots = [...root.querySelectorAll('.science-plot:not([data-mounted])')];
55
+ if (!plots.length) return;
56
+ plots.forEach(p=>p.dataset.mounted='pending');
57
+ try {
58
+ await load();
59
+ await Promise.all(plots.map(async p => {
60
+ const m = JSON.parse(p.querySelector('.science-data').textContent);
61
+ const target = p.querySelector('.science-plot-target');
62
+ const formula = m.kind === 'formula';
63
+ const data = formula ? formulaTraces(m, valuesOf(p), p) : m.data;
64
+ const layout = {separators:',.',paper_bgcolor:'rgba(0,0,0,0)',plot_bgcolor:'rgba(0,0,0,0)',font:{size:20,color:getComputedStyle(p).color},margin:{t:35,b:65,l:75,r:40},showlegend:data.length > 1,legend:{orientation:'h',y:1.08},
65
+ ...m.layout, autosize:true};
66
+ // eixos: os do modelo (log, faixa) juntam com o que o deck pôs em layout (títulos), sem um apagar o outro
67
+ if (formula) {
68
+ layout.xaxis = { ...(m.xlog ? { type: 'log', range: m.x.map((v) => Math.log10(v)) } : { range: m.x, zeroline: true }), ...(m.layout.xaxis || {}) };
69
+ layout.yaxis = { ...(m.ylog ? { type: 'log' } : {}), ...(m.y ? { range: m.ylog ? m.y.map((v) => Math.log10(v)) : m.y } : {}), ...(m.layout.yaxis || {}) };
70
+ }
71
+ if (formula && !data.length) return void (p.dataset.mounted = 'ready'); // nada para desenhar: fica a dica
72
+ target.replaceChildren(); // sai a prévia desenhada, entra o gráfico que se explora
73
+ await window.Plotly.newPlot(target,data,layout,{responsive:true,displaylogo:false,scrollZoom:true});
74
+ // controles deslizantes: mudou o valor, a curva redesenha (sem mexer no zoom que a pessoa escolheu)
75
+ p.querySelectorAll('[data-param]').forEach((input) => {
76
+ const stop = (e) => e.stopPropagation(); // setas e espaço no controle não trocam de slide
77
+ input.addEventListener('keydown', stop); input.addEventListener('pointerdown', stop); input.addEventListener('click', stop);
78
+ input.addEventListener('input', () => {
79
+ input.nextElementSibling.textContent = String(+Number(input.value).toFixed(3)).replace('.', ',');
80
+ window.Plotly.react(target, formulaTraces(m, valuesOf(p), p), { ...target.layout, datarevision: Date.now() });
81
+ });
82
+ });
83
+ p.dataset.mounted='ready';
84
+ }));
85
+ } catch (e) { plots.forEach(p=>{p.dataset.mounted='error';p.querySelector('.science-help').textContent=e.message;}); }
86
+ }
87
+ window.SagaScience = {mount, dispose(root) { root.querySelectorAll('.science-plot-target').forEach(p=>window.Plotly?.purge(p)); }};
88
+ window.SagaScienceReady = mount();
89
+ })();
@@ -0,0 +1,31 @@
1
+ /* Alumínio (lançamento de iPhone e iPad, 2020-2021): prata metálico com brilho de luz de estúdio, alumínio escovado,
2
+ títulos cromados (a cor continua sólida em "color": o fiscal mede o contraste por ela), cartões de metal com
3
+ chanfro de luz; capa com o título embaixo à esquerda e um disco de metal polido à direita; o escuro é grafite */
4
+ /* o metal sai das cores do tom (--bg, --fg, --surface): com uma paleta por cima, ele acompanha */
5
+ .th-aluminio{background-color:var(--bg);background-image:radial-gradient(120% 90% at 18% 0%,color-mix(in srgb,#fff 45%,var(--bg)) 0%,transparent 55%),linear-gradient(165deg,color-mix(in srgb,#fff 25%,var(--bg)) 0%,var(--bg) 48%,color-mix(in srgb,#000 12%,var(--bg)) 100%)}
6
+ .th-aluminio:is(.tone-dark,.tone-accent){background-image:radial-gradient(110% 80% at 80% 0%,color-mix(in srgb,#fff 14%,var(--bg)) 0%,transparent 60%),linear-gradient(170deg,color-mix(in srgb,#fff 8%,var(--bg)) 0%,var(--bg) 65%,color-mix(in srgb,#000 30%,var(--bg)) 100%)}
7
+ /* escovado: linhas finíssimas na horizontal, quase nada (dá o "metal" sem virar listra) */
8
+ .th-aluminio::after{content:"";position:absolute;inset:0;pointer-events:none;opacity:.5;background:repeating-linear-gradient(180deg,rgba(255,255,255,.07) 0 1px,rgba(0,0,0,.025) 1px 3px)}
9
+ .th-aluminio.tone-dark::after{opacity:.35;background:repeating-linear-gradient(180deg,rgba(255,255,255,.035) 0 1px,rgba(0,0,0,.08) 1px 3px)}
10
+ /* título cromado: grafite que clareia no meio, como o reflexo num corpo de alumínio */
11
+ .th-aluminio .ttl{background:linear-gradient(180deg,color-mix(in srgb,var(--fg) 82%,var(--bg)) 0%,var(--fg) 38%,color-mix(in srgb,var(--fg) 80%,var(--bg)) 62%,color-mix(in srgb,var(--fg) 58%,var(--bg)) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
12
+ .th-aluminio .ttl :is(mark,.em,.katex){-webkit-text-fill-color:currentColor}
13
+ .th-aluminio.tone-accent .ttl,.th-aluminio.tone-alert .ttl{background:none;-webkit-text-fill-color:currentColor}
14
+ /* kicker: pílula de metal com contorno fino, sem fundo cheio */
15
+ .th-aluminio .kicker{align-self:flex-start;padding:6px 20px;border:1.5px solid color-mix(in srgb,var(--fg) 28%,transparent);border-radius:999px;color:var(--muted);text-transform:uppercase;letter-spacing:.14em;background:transparent}
16
+ /* capa e fim: o título embaixo à esquerda; à direita, um disco de metal polido (o brilho de um produto) */
17
+ .th-aluminio .L-cover:not(:has(.cv-fig)) .cv-main,.th-aluminio .L-end:not(:has(.en-fig)) .en-main{justify-content:flex-end;align-items:flex-start;text-align:left;padding-bottom:30px;max-width:1150px}
18
+ .th-aluminio .orn i:nth-child(1){display:block;width:760px;height:760px;right:-160px;top:-120px;border-radius:50%;background:radial-gradient(circle at 34% 28%,#ffffff 0%,#eceef1 18%,#c3c6cc 46%,#9a9da4 70%,#d9dbdf 100%);box-shadow:inset -30px -40px 80px rgba(0,0,0,.18),inset 30px 30px 60px rgba(255,255,255,.7),0 40px 120px rgba(0,0,0,.12)}
19
+ .th-aluminio.tone-dark .orn i:nth-child(1){background:radial-gradient(circle at 34% 28%,#6e6e73 0%,#3a3a3e 30%,#1c1c1e 70%,#2c2c2e 100%);box-shadow:inset -30px -40px 80px rgba(0,0,0,.5),inset 20px 20px 60px rgba(255,255,255,.08),0 40px 120px rgba(0,0,0,.5)}
20
+ .th-aluminio .orn i:nth-child(2){display:block;left:120px;right:120px;bottom:96px;height:1px;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--fg) 30%,transparent),transparent)}
21
+ .th-aluminio:not(.L-cover-slide):not(.L-end-slide):not(.L-section-slide)>.orn i:nth-child(1){display:none}
22
+ .th-aluminio.L-cover-slide .cv-fig,.th-aluminio.L-end-slide .en-fig{z-index:1}
23
+ /* seção: número grande em metal, o título ao lado */
24
+ .th-aluminio .L-section:not(:has(.sc-fig)){flex-direction:row;align-items:flex-end;justify-content:flex-start;gap:60px;padding-bottom:40px}
25
+ .th-aluminio .sc-num{font-size:220px;line-height:.8;background:linear-gradient(180deg,#ffffff 0%,#c7c9ce 45%,#8e9097 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;filter:drop-shadow(0 2px 0 rgba(0,0,0,.12))}
26
+ /* cartões, números e citação: alumínio com chanfro (luz em cima, sombra embaixo) */
27
+ .th-aluminio :is(.card:not(.card-hi),.stat-card,.step-card,.cp-col:not(.hl),.ps-panel){background:linear-gradient(180deg,color-mix(in srgb,#fff 30%,var(--surface)) 0%,var(--surface) 55%,color-mix(in srgb,#000 6%,var(--surface)) 100%);border:1px solid color-mix(in srgb,var(--fg) 10%,transparent);box-shadow:inset 0 1px 0 color-mix(in srgb,#fff 60%,transparent),inset 0 -1px 0 rgba(0,0,0,.06),0 18px 40px -18px rgba(0,0,0,.3)}
28
+ .th-aluminio .cd-ico,.th-aluminio .st-icon,.th-aluminio .step-icon{background:radial-gradient(circle at 35% 30%,#ffffff,#d1d3d8 60%,#b5b8be);color:var(--em);box-shadow:inset 0 -2px 4px rgba(0,0,0,.15)}
29
+ .th-aluminio .hd::after{content:"";flex:none;width:120px;height:4px;border-radius:4px;background:linear-gradient(90deg,#8e8e93,#e5e5ea,#8e8e93)}
30
+ .th-aluminio .li-n{color:var(--muted)}
31
+ .th-aluminio .q-mark{color:#a1a1a6}
@@ -0,0 +1,25 @@
1
+ /* Arcade: tela de tubo (azul-noite, linhas de varredura, brilho no meio), neon, tudo de pixel. A capa tem o título no
2
+ meio, uma placa de "PLAYER 1" (kicker com fundo e borda de pixel) e o chão de tijolinhos de um jogo de plataforma */
3
+ /* o fundo sai do --bg do tom: com uma paleta por cima, ele acompanha */
4
+ .th-arcade{background-color:var(--bg);background-image:radial-gradient(120% 90% at 50% 45%,color-mix(in srgb,var(--fg) 9%,var(--bg)) 0%,var(--bg) 62%,color-mix(in srgb,#000 40%,var(--bg)) 100%)}
5
+ /* linhas de varredura e a curvinha escura da borda do tubo */
6
+ .th-arcade::after{content:"";position:absolute;inset:0;pointer-events:none;z-index:3;background:repeating-linear-gradient(180deg,rgba(0,0,0,.18) 0 2px,transparent 2px 4px),radial-gradient(130% 120% at 50% 50%,transparent 60%,rgba(0,0,0,.55) 100%)}
7
+ .th-arcade .ttl{text-shadow:0 0 18px color-mix(in srgb,var(--hi) 45%,transparent),4px 4px 0 color-mix(in srgb,var(--em) 70%,transparent)}
8
+ .th-arcade .kicker{align-self:flex-start;background:var(--hi);color:var(--on-hi);border:4px solid var(--fg);box-shadow:4px 4px 0 var(--em);padding:4px 16px;text-transform:uppercase;font-size:30px;letter-spacing:.1em}
9
+ /* capa e fim: no meio, como a tela de "PRESS START" */
10
+ .th-arcade .L-cover:not(:has(.cv-fig)) .cv-main,.th-arcade .L-end:not(:has(.en-fig)) .en-main{align-items:center;text-align:center;justify-content:center;gap:34px}
11
+ .th-arcade :is(.L-cover,.L-end) .kicker{align-self:center}
12
+ /* chão de tijolos (capa, seção e fim) e uma moeda de pixel no alto */
13
+ .th-arcade .orn i:nth-child(1){display:block;left:0;right:0;bottom:0;height:64px;background:linear-gradient(0deg,#7a3b12 0 6px,transparent 6px),repeating-linear-gradient(90deg,#c8642a 0 60px,#7a3b12 60px 64px),#c8642a;box-shadow:inset 0 6px 0 #ffb066,inset 0 -6px 0 #5a2a0c}
14
+ .th-arcade .orn i:nth-child(2){display:block;width:48px;height:48px;right:150px;top:120px;background:#ffd23f;box-shadow:0 0 0 6px #b88a00,0 0 30px #ffd23f;clip-path:polygon(25% 0,75% 0,75% 12%,88% 12%,88% 25%,100% 25%,100% 75%,88% 75%,88% 88%,75% 88%,75% 100%,25% 100%,25% 88%,12% 88%,12% 75%,0 75%,0 25%,12% 25%,12% 12%,25% 12%)}
15
+ .th-arcade:not(.L-cover-slide):not(.L-end-slide):not(.L-section-slide)>.orn i{display:none}
16
+ /* seção: "WORLD 1-1" — o número grande em pixel, o título embaixo */
17
+ .th-arcade .L-section:not(:has(.sc-fig)){flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:22px}
18
+ .th-arcade .sc-num{font-family:'Press Start 2P',monospace;font-size:120px;color:var(--hi);text-shadow:6px 6px 0 var(--em)}
19
+ /* conteúdo: cartões com borda de pixel e sombra dura, ícones em quadradinho, números da lista em placa */
20
+ .th-arcade :is(.card:not(.card-hi),.stat-card,.step-card,.cp-col:not(.hl),.ps-panel){background:var(--surface);border:4px solid color-mix(in srgb,var(--fg) 85%,transparent);border-radius:0;box-shadow:8px 8px 0 color-mix(in srgb,var(--em) 75%,transparent)}
21
+ .th-arcade .card-hi{border:4px solid var(--fg);box-shadow:8px 8px 0 var(--em)}
22
+ .th-arcade .cd-ico,.th-arcade .st-icon,.th-arcade .step-icon{border-radius:0;background:var(--hi);color:var(--on-hi);box-shadow:4px 4px 0 var(--em)}
23
+ .th-arcade .li-n{background:var(--hi);color:var(--on-hi);padding:2px 10px;font-family:'VT323',monospace}
24
+ .th-arcade .hd::after{content:"";flex:none;width:180px;height:8px;background:repeating-linear-gradient(90deg,var(--hi) 0 16px,transparent 16px 24px)}
25
+ .th-arcade .q-mark{color:var(--em)}
@@ -0,0 +1,17 @@
1
+ /* Aurora: dois brilhos desfocados nos cantos, capa centralizada com traço em gradiente sob o título */
2
+ .th-aurora .orn i:nth-child(1){display:block;width:640px;height:640px;left:-220px;top:-240px;border-radius:50%;background:var(--hi);filter:blur(120px);opacity:.35}
3
+ .th-aurora .orn i:nth-child(2){display:block;width:560px;height:560px;right:-180px;bottom:-260px;border-radius:50%;background:var(--em);filter:blur(120px);opacity:.3}
4
+ .th-aurora .kicker{letter-spacing:.2em;color:var(--hi)}
5
+ .th-aurora .L-cover:not(:has(.cv-fig)) .cv-main,.th-aurora .L-end:not(:has(.en-fig)) .en-main{align-items:center;text-align:center}
6
+ .th-aurora :is(.L-cover,.L-end) .ttl{padding-bottom:30px;background:linear-gradient(90deg,var(--hi),var(--em)) no-repeat 50% 100%/240px 6px}
7
+ .th-aurora .sc-num{background:linear-gradient(180deg,var(--hi),var(--em));-webkit-background-clip:text;background-clip:text;color:transparent}
8
+ /* conteúdo: traço em gradiente sob o título, cartões de vidro com brilho, números da lista com traço luminoso, citação
9
+ e número grande em vidro, frase centralizada */
10
+ .th-aurora .hd::after{content:"";flex:none;width:200px;height:6px;border-radius:6px;background:linear-gradient(90deg,var(--hi),var(--em))}
11
+ .th-aurora :is(.card:not(.card-hi),.stat-card){background:color-mix(in srgb,var(--surface) 55%,transparent);border:1px solid color-mix(in srgb,var(--hi) 35%,transparent);box-shadow:0 0 40px color-mix(in srgb,var(--hi) 18%,transparent)}
12
+ .th-aurora .li-n{color:var(--hi);border-bottom:3px solid var(--em);padding-bottom:8px}
13
+ .th-aurora .L-quote{align-items:center;text-align:center;padding:0 160px}
14
+ .th-aurora .q-mark{color:var(--hi)}
15
+ .th-aurora .q-text{background:color-mix(in srgb,var(--surface) 55%,transparent);border:1px solid color-mix(in srgb,var(--hi) 35%,transparent);border-radius:var(--radius);padding:50px 70px}
16
+ .th-aurora .nb-main{background:color-mix(in srgb,var(--surface) 55%,transparent);border:1px solid color-mix(in srgb,var(--hi) 35%,transparent);border-radius:var(--radius);padding:40px 60px}
17
+ .th-aurora .L-statement{align-items:center;text-align:center}
@@ -0,0 +1,19 @@
1
+ /* Bauhaus: círculo, quadrado e triângulo na capa e no fim, faixa de cor na lateral, número da seção num círculo */
2
+ .th-bauhaus .orn i:nth-child(4){display:block;left:0;top:0;bottom:0;width:18px;background:var(--hi)}
3
+ .th-bauhaus:is(.L-cover-slide,.L-end-slide) .orn i:nth-child(1){display:block;right:-120px;top:-120px;width:520px;height:520px;border-radius:50%;background:var(--hi)}
4
+ .th-bauhaus:is(.L-cover-slide,.L-end-slide) .orn i:nth-child(2){display:block;right:280px;bottom:0;width:230px;height:230px;background:var(--em)}
5
+ .th-bauhaus:is(.L-cover-slide,.L-end-slide) .orn i:nth-child(3){display:block;right:40px;bottom:0;border-left:130px solid transparent;border-right:130px solid transparent;border-bottom:220px solid var(--fg)}
6
+ .th-bauhaus .kicker{align-self:flex-start;background:var(--hi);color:var(--on-hi);padding:8px 18px}
7
+ .th-bauhaus .L-cover .cv-main,.th-bauhaus .L-end .en-main{justify-content:flex-end}
8
+ .th-bauhaus .sc-num{display:flex;align-items:center;justify-content:center;width:440px;height:440px;border-radius:50%;background:var(--hi);color:var(--on-hi);font-size:230px}
9
+ /* conteúdo: círculo de cor acima do título, cartões com faixa grossa no alto alternando as primárias, números da lista
10
+ em círculos, marca da citação num círculo, número grande e frase com bloco de cor */
11
+ .th-bauhaus .hd::before{content:"";flex:none;width:56px;height:56px;border-radius:50%;background:var(--em)}
12
+ .th-bauhaus :is(.card,.stat-card){border-radius:0;border-top:18px solid var(--hi)}
13
+ .th-bauhaus :is(.card,.stat-card):nth-child(3n+2){border-top-color:var(--em)}
14
+ .th-bauhaus :is(.card,.stat-card):nth-child(3n){border-top-color:var(--fg)}
15
+ .th-bauhaus .li-n{display:flex;align-items:center;justify-content:center;width:92px;height:92px;min-width:92px;border-radius:50%;background:var(--hi);color:var(--on-hi);font-size:38px}
16
+ .th-bauhaus .li-b{border:0;border-radius:0;background:var(--em);width:26px;height:26px}
17
+ .th-bauhaus .q-mark{width:170px;height:170px;border-radius:50%;background:var(--hi);color:var(--on-hi);text-align:center;font-size:240px;line-height:1.05;overflow:hidden}
18
+ .th-bauhaus .nb-val{border-left:24px solid var(--hi);padding-left:40px;margin-left:0}
19
+ .th-bauhaus .st-body{border-top:18px solid var(--hi);padding-top:40px}
@@ -0,0 +1,19 @@
1
+ /* Editorial (revista): fio duplo no alto, chapéu entre fios, capa e fim centralizados; seção com o número à direita */
2
+ .th-editorial .orn i:nth-child(1){display:block;left:120px;right:120px;top:58px;border-top:2px solid var(--fg)}
3
+ .th-editorial .orn i:nth-child(2){display:block;left:120px;right:120px;top:66px;border-top:1px solid var(--fg)}
4
+ .th-editorial .kicker{align-self:flex-start;border-top:1px solid currentColor;border-bottom:1px solid currentColor;padding:8px 0;text-transform:uppercase;letter-spacing:.3em}
5
+ .th-editorial .L-cover:not(:has(.cv-fig)) .cv-main,.th-editorial .L-end:not(:has(.en-fig)) .en-main{align-items:center;text-align:center}
6
+ .th-editorial .L-cover .kicker,.th-editorial .L-end .kicker{align-self:center}
7
+ .th-editorial .L-section:not(:has(.sc-fig)){flex-direction:row-reverse}
8
+ .th-editorial .sc-num{font-style:italic;border-left:2px solid var(--fg);padding-left:50px}
9
+ /* conteúdo: título sobre fio fino, cartões sem caixa (só o fio de coluna no alto), número da lista em itálico com fio,
10
+ citação e frase centralizadas entre fios, número grande em itálico sublinhado */
11
+ .th-editorial .hd{border-bottom:1px solid var(--fg);padding-bottom:26px}
12
+ .th-editorial :is(.card:not(.card-hi),.stat-card){background:transparent;border:0;border-top:2px solid var(--fg);border-radius:0;padding:32px 8px 0}
13
+ .th-editorial .li-n{font-style:italic;border-right:1px solid var(--fg);padding-right:24px}
14
+ .th-editorial .L-quote{align-items:center;text-align:center;padding:0 160px}
15
+ .th-editorial .q-mark{height:100px}
16
+ .th-editorial .q-text{border-top:1px solid var(--fg);border-bottom:1px solid var(--fg);padding:40px 0}
17
+ .th-editorial .nb-val{font-style:italic;border-bottom:2px solid var(--fg)}
18
+ .th-editorial .L-statement{align-items:center;text-align:center}
19
+ .th-editorial .st-body{border-top:1px solid var(--fg);border-bottom:1px solid var(--fg);padding:36px 0}
@@ -0,0 +1,17 @@
1
+ /* Jornal: cabeçalho com fio grosso e fino, fio no pé, chapéu com fio duplo, manchete no alto sublinhada, seção com fio de coluna */
2
+ .th-jornal .orn i:nth-child(1){display:block;left:80px;right:80px;top:56px;height:8px;border-top:3px solid var(--fg);border-bottom:1px solid var(--fg)}
3
+ .th-jornal .orn i:nth-child(2){display:block;left:80px;right:80px;bottom:76px;border-top:1px solid var(--fg)}
4
+ .th-jornal .kicker{align-self:flex-start;border-top:4px double currentColor;padding-top:10px;text-transform:uppercase;letter-spacing:.18em}
5
+ .th-jornal .L-cover .cv-main,.th-jornal .L-end .en-main{justify-content:flex-start}
6
+ .th-jornal .L-cover .ttl{border-bottom:2px solid var(--fg);padding-bottom:14px}
7
+ .th-jornal .sc-num{font-size:220px;border-right:2px solid var(--fg);padding-right:60px}
8
+ /* conteúdo: título sobre fio duplo, cartões como colunas de jornal (fio vertical, sem caixa), número da lista em
9
+ tarja escura, citação e frase entre fio grosso e fino, número grande sublinhado grosso */
10
+ .th-jornal .hd{border-bottom:4px double var(--fg);padding-bottom:22px}
11
+ .th-jornal :is(.card:not(.card-hi),.stat-card){background:transparent;border:0;border-left:1px solid var(--fg);border-radius:0;padding:10px 0 10px 36px}
12
+ .th-jornal .li-n{background:var(--fg);color:var(--bg);padding:6px 14px 0;text-align:center}
13
+ .th-jornal .li-b{border:0;border-radius:0;background:var(--fg);width:18px;height:18px}
14
+ .th-jornal .q-mark{display:none}
15
+ .th-jornal .q-text{font-style:italic;border-top:6px solid var(--fg);border-bottom:2px solid var(--fg);padding:36px 0}
16
+ .th-jornal .nb-val{border-bottom:6px solid var(--fg);padding-bottom:10px}
17
+ .th-jornal .st-body{border-top:6px solid var(--fg);border-bottom:2px solid var(--fg);padding:34px 0}
@@ -0,0 +1,14 @@
1
+ /* Manual noite (documentação técnica escura): tudo alinhado à esquerda como numa página de docs; título com filete embaixo, chapéu
2
+ em mono como um caminho de arquivo, cartões e código com borda fina, sem ornamento. Mesmo arranjo do manual (par claro). */
3
+ .th-manual-noite{--doc-rule:color-mix(in srgb,var(--fg) 14%,transparent)}
4
+ .th-manual-noite .kicker{font-family:var(--font-mono,monospace);letter-spacing:.02em;text-transform:none;color:var(--em)}
5
+ .th-manual-noite .hd{align-items:flex-start;text-align:left;padding-bottom:22px;margin-bottom:40px;border-bottom:2px solid var(--doc-rule)}
6
+ .th-manual-noite .hd .ttl{text-align:left}
7
+ .th-manual-noite :is(.card:not(.card-hi),.stat-card,.adaptive-item){background:var(--surface);border:1px solid var(--doc-rule);box-shadow:none}
8
+ .th-manual-noite .code{border:1px solid var(--doc-rule)}
9
+ .th-manual-noite .L-cover:not(:has(.cv-fig)) .cv-main{align-items:flex-start;text-align:left;border-left:10px solid var(--em);padding-left:56px}
10
+ .th-manual-noite .L-section:not(:has(.sc-fig)){flex-direction:row;align-items:center;gap:48px;text-align:left}
11
+ .th-manual-noite .L-section .sc-num{font-family:var(--font-mono,monospace);font-size:96px;color:var(--em)}
12
+ .th-manual-noite .L-quote{border-left:8px solid var(--em);padding-left:60px}
13
+ .th-manual-noite .L-statement{align-items:flex-start;text-align:left}
14
+ .th-manual-noite .li-n{font-family:var(--font-mono,monospace);color:var(--em)}
@@ -0,0 +1,14 @@
1
+ /* Manual (documentação técnica): tudo alinhado à esquerda como numa página de docs; título com filete embaixo, chapéu
2
+ em mono como um caminho de arquivo, cartões e código com borda fina, sem ornamento. O par manual-noite usa o mesmo arranjo. */
3
+ .th-manual{--doc-rule:color-mix(in srgb,var(--fg) 14%,transparent)}
4
+ .th-manual .kicker{font-family:var(--font-mono,monospace);letter-spacing:.02em;text-transform:none;color:var(--em)}
5
+ .th-manual .hd{align-items:flex-start;text-align:left;padding-bottom:22px;margin-bottom:40px;border-bottom:2px solid var(--doc-rule)}
6
+ .th-manual .hd .ttl{text-align:left}
7
+ .th-manual :is(.card:not(.card-hi),.stat-card,.adaptive-item){background:var(--surface);border:1px solid var(--doc-rule);box-shadow:none}
8
+ .th-manual .code{border:1px solid var(--doc-rule)}
9
+ .th-manual .L-cover:not(:has(.cv-fig)) .cv-main{align-items:flex-start;text-align:left;border-left:10px solid var(--em);padding-left:56px}
10
+ .th-manual .L-section:not(:has(.sc-fig)){flex-direction:row;align-items:center;gap:48px;text-align:left}
11
+ .th-manual .L-section .sc-num{font-family:var(--font-mono,monospace);font-size:96px;color:var(--em)}
12
+ .th-manual .L-quote{border-left:8px solid var(--em);padding-left:60px}
13
+ .th-manual .L-statement{align-items:flex-start;text-align:left}
14
+ .th-manual .li-n{font-family:var(--font-mono,monospace);color:var(--em)}
@@ -0,0 +1,21 @@
1
+ /* Noite (sala de decisão): moldura fina na cor de destaque, chapéu entre traços, tudo centralizado e sóbrio */
2
+ .th-noite .orn i:nth-child(1){display:block;inset:34px;border:1.5px solid color-mix(in srgb,var(--hi) 70%,transparent)}
3
+ .th-noite .kicker{display:flex;align-items:center;gap:22px;letter-spacing:.35em;text-transform:uppercase;color:var(--hi)}
4
+ .th-noite .kicker::before,.th-noite .kicker::after{content:"";width:60px;height:1px;background:currentColor}
5
+ .th-noite .L-cover:not(:has(.cv-fig)) .cv-main,.th-noite .L-end:not(:has(.en-fig)) .en-main{align-items:center;text-align:center}
6
+ .th-noite .L-section:not(:has(.sc-fig)){flex-direction:column;justify-content:center;gap:10px;text-align:center}
7
+ .th-noite .L-section .sc-num{font-size:150px;color:var(--hi)}
8
+ .th-noite .sc-text{align-items:center}
9
+ /* conteúdo: título centralizado, cartões vazados com fio de latão, números da lista em anel fino, citação, número e
10
+ frase centralizados (sala de decisão: simétrico e sóbrio) */
11
+ .th-noite .hd{align-items:center;text-align:center}
12
+ .th-noite .hd .ttl{text-align:center}
13
+ .th-noite :is(.card:not(.card-hi),.stat-card){background:transparent;border:1.5px solid color-mix(in srgb,var(--hi) 60%,transparent);border-radius:0}
14
+ .th-noite .li-n{display:flex;align-items:center;justify-content:center;width:96px;height:96px;min-width:96px;border:1.5px solid var(--hi);border-radius:50%;font-size:38px;color:var(--hi)}
15
+ .th-noite .L-quote{align-items:center;text-align:center;padding:0 140px}
16
+ .th-noite .q-mark{color:var(--hi)}
17
+ .th-noite .L-number:not(:has(.nb-side)){justify-content:center}
18
+ .th-noite .L-number:not(:has(.nb-side)) .nb-main{flex:none;align-items:center;text-align:center}
19
+ .th-noite .L-statement{align-items:center;text-align:center}
20
+ /* botão Voltar (navegação por caminhos) fora da barra/moldura do tema */
21
+ .th-noite .nav-back{top:46px;left:60px}
@@ -0,0 +1,17 @@
1
+ /* Oceano: ondas no pé, chapéu em pílula, seção com o número em contorno acima do título */
2
+ .th-oceano .orn i:nth-child(1),.th-oceano .orn i:nth-child(2){display:block;left:-10%;right:-10%;height:420px;border-radius:50% 50% 0 0/60% 60% 0 0}
3
+ .th-oceano .orn i:nth-child(1){bottom:-330px;background:color-mix(in srgb,var(--hi) 20%,transparent)}
4
+ .th-oceano .orn i:nth-child(2){bottom:-350px;left:10%;right:-30%;background:color-mix(in srgb,var(--hi) 32%,transparent)}
5
+ .th-oceano .kicker{align-self:flex-start;background:var(--hi);color:var(--on-hi);padding:6px 22px;border-radius:999px;text-transform:uppercase;letter-spacing:.1em}
6
+ .th-oceano .L-section:not(:has(.sc-fig)){flex-direction:column;align-items:flex-start;justify-content:center;gap:0}
7
+ .th-oceano .sc-num{font-size:200px;color:transparent;-webkit-text-stroke:3px var(--fg)}
8
+ /* conteúdo: traço arredondado sob o título, cartões bem arredondados e flutuando (sombra), números da lista em bolhas,
9
+ citação e frase em balão, número grande numa pílula */
10
+ .th-oceano .hd::after{content:"";flex:none;width:160px;height:8px;border-radius:8px;background:var(--hi)}
11
+ .th-oceano :is(.card:not(.card-hi),.stat-card){border:0;border-radius:40px;box-shadow:0 18px 40px color-mix(in srgb,var(--fg) 12%,transparent)}
12
+ .th-oceano .li-n{display:flex;align-items:center;justify-content:center;width:92px;height:92px;min-width:92px;border-radius:50%;background:color-mix(in srgb,var(--hi) 22%,var(--bg));color:var(--fg);font-size:38px}
13
+ .th-oceano .L-quote{justify-content:center}
14
+ .th-oceano .q-text{background:var(--surface);border-radius:48px;padding:50px 70px}
15
+ .th-oceano .nb-val{align-self:flex-start;background:color-mix(in srgb,var(--hi) 16%,var(--bg));border-radius:999px;padding:14px 70px 0;margin:10px 0 6px}
16
+ .th-oceano .L-statement{align-items:center;text-align:center}
17
+ .th-oceano .st-body{background:var(--surface);border-radius:48px;padding:50px 70px}
@@ -0,0 +1,23 @@
1
+ /* Pop: adesivos (selo serrilhado e bloco torto), chapéu em etiqueta inclinada, capa e seção centralizadas com sombra chapada */
2
+ .th-pop .orn i:nth-child(1){display:block;top:40px;right:60px;width:80px;height:80px;border-radius:50%;background:var(--hi);border:5px dashed var(--bg);outline:5px solid var(--hi);transform:rotate(12deg)}
3
+ .th-pop:is(.L-cover-slide,.L-section-slide,.L-end-slide) .orn i:nth-child(1){width:150px;height:150px;top:50px;right:70px}
4
+ .th-pop .orn i:nth-child(2){display:block;left:60px;bottom:50px;width:70px;height:70px;background:var(--em);border-radius:20px;transform:rotate(-14deg)}
5
+ .th-pop .kicker{align-self:flex-start;background:var(--em);color:var(--bg);padding:6px 18px;border-radius:12px;transform:rotate(-3deg);text-transform:uppercase}
6
+ .th-pop .L-cover:not(:has(.cv-fig)) .cv-main,.th-pop .L-end:not(:has(.en-fig)) .en-main{align-items:center;text-align:center}
7
+ .th-pop :is(.L-cover,.L-end,.L-section) .kicker{align-self:center}
8
+ .th-pop :is(.L-cover,.L-section) .ttl{text-shadow:6px 6px 0 var(--hi)}
9
+ .th-pop .L-section:not(:has(.sc-fig)){flex-direction:column;justify-content:center;text-align:center;gap:0}
10
+ .th-pop .L-section .sc-num{font-size:180px}
11
+ .th-pop .sc-text{align-items:center}
12
+ /* conteúdo: título com sombra chapada, cartões com contorno grosso e sombra dura (levemente tortos), números da lista
13
+ em etiquetas, citação e frase em balão de HQ, número grande com sombra chapada */
14
+ .th-pop .hd .ttl{text-shadow:5px 5px 0 var(--hi)}
15
+ .th-pop .hd{transform:rotate(-1deg)}
16
+ .th-pop :is(.card,.stat-card){border:4px solid var(--fg);box-shadow:10px 10px 0 var(--fg)}
17
+ .th-pop :is(.card,.stat-card):nth-child(odd){transform:rotate(-1.2deg)}
18
+ .th-pop :is(.card,.stat-card):nth-child(even){transform:rotate(1deg)}
19
+ .th-pop .li-n{background:var(--em);color:var(--bg);border-radius:18px;padding:6px 16px 0;transform:rotate(-4deg)}
20
+ .th-pop .L-quote{align-items:center;text-align:center;padding:0 120px}
21
+ .th-pop .q-text{background:var(--surface);border:4px solid var(--fg);border-radius:40px;box-shadow:10px 10px 0 var(--hi);padding:50px 70px}
22
+ .th-pop .nb-val{text-shadow:10px 10px 0 var(--hi);transform:rotate(-3deg)}
23
+ .th-pop .st-body{border:4px solid var(--fg);border-radius:30px;box-shadow:10px 10px 0 var(--hi);padding:50px 70px}
@@ -0,0 +1,18 @@
1
+ /* Prata (Keynote): nada de enfeite; muito respiro, tudo centralizado, título contido, número da seção discreto */
2
+ .th-prata .L-cover:not(:has(.cv-fig)) .cv-main,.th-prata .L-end:not(:has(.en-fig)) .en-main{align-items:center;text-align:center;gap:28px}
3
+ .th-prata :is(.L-cover,.L-end) .ttl{max-width:1300px}
4
+ .th-prata .kicker{color:var(--muted);letter-spacing:.02em}
5
+ .th-prata .L-section:not(:has(.sc-fig)){flex-direction:column;justify-content:center;text-align:center;gap:24px}
6
+ .th-prata .L-section .sc-num{font-size:120px;color:var(--muted)}
7
+ .th-prata .sc-text{align-items:center}
8
+ /* conteúdo: tudo centralizado e com ar; cartões sem caixa, números da lista discretos, citação e número grande no meio */
9
+ .th-prata .hd{align-items:center;text-align:center;margin-bottom:70px}
10
+ .th-prata .hd .ttl{text-align:center}
11
+ .th-prata :is(.card:not(.card-hi),.stat-card){background:transparent;border:0;text-align:center;align-items:center}
12
+ .th-prata .li-n{color:var(--muted);font-size:40px}
13
+ .th-prata .L-quote{align-items:center;text-align:center;padding:0 200px}
14
+ .th-prata .q-mark{color:var(--muted);font-size:200px;height:90px}
15
+ .th-prata .L-number:not(:has(.nb-side)){justify-content:center}
16
+ .th-prata .L-number:not(:has(.nb-side)) .nb-main{flex:none;align-items:center;text-align:center}
17
+ .th-prata .L-statement{align-items:center;text-align:center}
18
+ .th-prata .st-body{max-width:1400px}
@@ -0,0 +1,28 @@
1
+ /* Prisma: cor localizada, hierarquia ampla e superfícies claras. */
2
+ .th-prisma .kicker{color:var(--c-c5);letter-spacing:.12em;font-size:23px}
3
+ .th-prisma .hd{align-items:flex-start;text-align:left;margin-bottom:32px}
4
+ .th-prisma .hd .ttl{text-align:left;letter-spacing:-.045em}
5
+ .th-prisma .slide-num{color:var(--c-c5)}
6
+ .th-prisma :is(.card,.adaptive-item,.bt-tile){border:1px solid var(--line);box-shadow:none;background:#fff}
7
+ .th-prisma :is(.card,.adaptive-item):nth-child(5n+1){--item-color:var(--c-c1)}
8
+ .th-prisma :is(.card,.adaptive-item):nth-child(5n+2){--item-color:var(--c-c2)}
9
+ .th-prisma :is(.card,.adaptive-item):nth-child(5n+3){--item-color:var(--c-c3)}
10
+ .th-prisma :is(.card,.adaptive-item):nth-child(5n+4){--item-color:var(--c-c4)}
11
+ .th-prisma :is(.card,.adaptive-item):nth-child(5n){--item-color:var(--c-c5)}
12
+ .th-prisma :is(.adaptive-index,.adaptive-value,.card-icon){color:var(--item-color,var(--em))}
13
+ .th-prisma .adaptive-ribbon .adaptive-item{border:0;border-top:5px solid var(--item-color);border-radius:0;background:transparent}
14
+ .th-prisma .adaptive-mosaic .adaptive-item{border-top:6px solid var(--item-color)}
15
+ .th-prisma .L-cover .ttl{letter-spacing:-.065em;line-height:1.02}
16
+ .th-prisma .L-cover .sub{color:var(--muted);font-size:36px;max-width:800px}
17
+ .th-prisma .L-section .sc-num{color:var(--c-c5);letter-spacing:-.08em}
18
+ .th-prisma .L-statement{align-items:flex-start;text-align:left}
19
+ .th-prisma .L-statement .st-line{letter-spacing:-.045em}
20
+ .th-prisma .meeting-option{border-left:5px solid var(--c-c1);background:#fff}
21
+ .th-prisma .meeting-option:nth-child(2){border-left-color:var(--c-c2)}
22
+ .th-prisma .meeting-option:nth-child(3){border-left-color:var(--c-c3)}
23
+ .th-prisma .meeting-actions button{border-radius:12px}
24
+ .th-prisma .ps-letter{color:var(--c-c5)}
25
+ .th-prisma .ps-panel:nth-child(2) .ps-letter{color:var(--c-c2)}
26
+ .th-prisma .ps-panel:nth-child(3) .ps-letter{color:var(--c-c3)}
27
+ .th-prisma .ps-panel:nth-child(4) .ps-letter{color:var(--c-c4)}
28
+ .th-prisma .pg-frame{border:0;background:#fff;border-radius:24px}
@@ -0,0 +1,18 @@
1
+ /* Rabisco: fitas adesivas nos cantos, chapéu com marca-texto torto, títulos de capa e seção levemente inclinados */
2
+ .th-rabisco .orn i:nth-child(1),.th-rabisco .orn i:nth-child(2){display:block;top:26px;width:170px;height:44px;background:color-mix(in srgb,var(--hi) 45%,transparent);box-shadow:0 2px 4px #0000001a}
3
+ .th-rabisco .orn i:nth-child(1){left:70px;transform:rotate(-8deg)}
4
+ .th-rabisco .orn i:nth-child(2){right:70px;transform:rotate(7deg)}
5
+ .th-rabisco .kicker{align-self:flex-start;background:color-mix(in srgb,var(--hi) 55%,transparent);padding:2px 14px;transform:rotate(-2deg)}
6
+ .th-rabisco :is(.L-cover,.L-section,.L-end) .ttl{transform:rotate(-1.5deg)}
7
+ .th-rabisco .sc-num{transform:rotate(-6deg)}
8
+ /* conteúdo: risco de caneta sob o título, cartões tracejados e tortinhos, números da lista circulados à mão, citação
9
+ num papel de recado, número e frase levemente inclinados */
10
+ .th-rabisco .hd::after{content:"";flex:none;width:320px;height:16px;border-top:5px solid var(--hi);border-radius:50%;transform:rotate(-2deg)}
11
+ .th-rabisco :is(.card:not(.card-hi),.stat-card){background:transparent;border:3px dashed var(--line);border-radius:26px 8px 30px 10px/12px 30px 8px 26px}
12
+ .th-rabisco :is(.card,.stat-card):nth-child(odd){transform:rotate(-.8deg)}
13
+ .th-rabisco :is(.card,.stat-card):nth-child(even){transform:rotate(.8deg)}
14
+ .th-rabisco .li-n{display:flex;align-items:center;justify-content:center;width:90px;height:84px;min-width:90px;border:3px solid var(--em);border-radius:48% 52% 45% 55%/55% 45% 52% 48%;font-size:38px;transform:rotate(-4deg)}
15
+ .th-rabisco .q-mark{transform:rotate(-8deg);margin-bottom:40px}
16
+ .th-rabisco .q-text{background:color-mix(in srgb,var(--hi) 18%,transparent);padding:40px 50px;transform:rotate(-1deg)}
17
+ .th-rabisco .nb-val{transform:rotate(-3deg)}
18
+ .th-rabisco .st-body{transform:rotate(-1deg)}
@@ -0,0 +1,33 @@
1
+ /* Relevo: a sala de controle de um filme de ficção científica, sóbria. Fundo grafite com um halo frio, curvas de nível
2
+ finíssimas, cantoneiras de mira, painéis de vidro fosco com traço gelo, rótulos técnicos em monoespaçada.
3
+ Capa: o título leve embaixo à esquerda, um rótulo técnico com traço antes, as curvas de nível concentradas à direita */
4
+ /* o fundo sai das cores do tom (--bg, --hi): com uma paleta por cima, ele acompanha (a letra nunca cai na cor do fundo) */
5
+ .th-relevo{background-color:var(--bg);background-image:radial-gradient(90% 70% at 72% 30%,color-mix(in srgb,var(--hi) 9%,var(--bg)) 0%,var(--bg) 60%,color-mix(in srgb,#000 22%,var(--bg)) 100%)}
6
+ /* curvas de nível ao fundo (anéis concêntricos deformados), quase invisíveis */
7
+ .th-relevo::before{content:"";position:absolute;inset:0;pointer-events:none;opacity:.5;background:
8
+ repeating-radial-gradient(ellipse 60% 48% at 78% 34%,transparent 0 38px,color-mix(in srgb,var(--hi) 8%,transparent) 38px 39px),
9
+ repeating-radial-gradient(ellipse 40% 30% at 18% 92%,transparent 0 30px,color-mix(in srgb,var(--hi) 6%,transparent) 30px 31px)}
10
+ /* cantoneiras de mira nos quatro cantos */
11
+ .th-relevo .orn i{display:block;width:44px;height:44px;border:0 solid color-mix(in srgb,var(--hi) 50%,transparent)}
12
+ .th-relevo .orn i:nth-child(1){left:48px;top:44px;border-left-width:1.5px;border-top-width:1.5px}
13
+ .th-relevo .orn i:nth-child(2){right:48px;top:44px;border-right-width:1.5px;border-top-width:1.5px}
14
+ .th-relevo .orn i:nth-child(3){left:48px;bottom:44px;border-left-width:1.5px;border-bottom-width:1.5px}
15
+ .th-relevo .orn i:nth-child(4){right:48px;bottom:44px;border-right-width:1.5px;border-bottom-width:1.5px}
16
+ /* rótulo técnico: um traço antes, monoespaçada fina */
17
+ .th-relevo .kicker{display:flex;align-items:center;gap:16px;color:var(--hi);font-size:20px;background:transparent}
18
+ .th-relevo .kicker::before{content:"";width:46px;height:1.5px;background:currentColor;opacity:.8}
19
+ .th-relevo .ttl mark{background:transparent;color:var(--hi);box-shadow:inset 0 -.035em 0 color-mix(in srgb,var(--hi) 55%,transparent)}
20
+ /* capa e fim: título leve embaixo à esquerda, bem grande */
21
+ .th-relevo .L-cover:not(:has(.cv-fig)) .cv-main,.th-relevo .L-end:not(:has(.en-fig)) .en-main{justify-content:flex-end;padding-bottom:70px;max-width:1300px}
22
+ .th-relevo :is(.L-cover,.L-end) .ttl{font-weight:200}
23
+ /* seção: número fino e enorme, como uma leitura de instrumento */
24
+ .th-relevo .L-section:not(:has(.sc-fig)){flex-direction:row;align-items:center;gap:70px}
25
+ .th-relevo .sc-num{font-size:260px;font-weight:100;color:transparent;-webkit-text-stroke:1.5px color-mix(in srgb,var(--hi) 70%,transparent)}
26
+ /* conteúdo: vidro fosco com traço gelo e um marcador de canto */
27
+ .th-relevo :is(.card:not(.card-hi),.stat-card,.step-card,.cp-col:not(.hl),.ps-panel){background:linear-gradient(180deg,color-mix(in srgb,var(--fg) 5%,transparent),color-mix(in srgb,var(--fg) 2%,transparent));border:1px solid color-mix(in srgb,var(--hi) 20%,transparent);border-radius:6px;box-shadow:inset 0 1px 0 color-mix(in srgb,var(--fg) 6%,transparent),0 30px 60px -30px rgba(0,0,0,.5);backdrop-filter:blur(6px)}
28
+ .th-relevo .card-hi{border:1px solid color-mix(in srgb,var(--hi) 55%,transparent)}
29
+ .th-relevo .cd-ico,.th-relevo .st-icon,.th-relevo .step-icon{background:transparent;border:1px solid color-mix(in srgb,var(--hi) 50%,transparent);color:var(--hi);border-radius:4px}
30
+ .th-relevo .hd::after{content:"";flex:none;width:90px;height:1.5px;background:linear-gradient(90deg,var(--hi),transparent)}
31
+ .th-relevo .li-n{color:var(--hi);font-family:'Cascadia Mono',monospace;font-weight:400}
32
+ .th-relevo .q-mark{color:var(--em)}
33
+ .th-relevo .st-val,.th-relevo .nb-val{font-weight:200}
@@ -0,0 +1,16 @@
1
+ /* Sinal (sinalização): faixa zebrada de aviso no pé, losango de atenção, selo no chapéu; capa e fim ancorados embaixo */
2
+ .th-sinal .orn i:nth-child(1){display:block;left:0;right:0;bottom:0;height:22px;background:repeating-linear-gradient(-45deg,var(--fg) 0 26px,transparent 26px 52px) var(--hi)}
3
+ .th-sinal .orn i:nth-child(2){display:block;top:40px;right:48px;width:40px;height:40px;border:6px solid var(--hi);transform:rotate(45deg)}
4
+ .th-sinal .kicker{align-self:flex-start;background:var(--fg);color:var(--bg);padding:8px 16px;text-transform:uppercase;letter-spacing:.12em}
5
+ .th-sinal .L-cover .cv-main,.th-sinal .L-end .en-main{justify-content:flex-end}
6
+ .th-sinal .sc-num{font-size:300px;border:14px solid currentColor;padding:10px 40px 0;border-radius:var(--radius)}
7
+ /* conteúdo: título com barra de aviso ao lado, cartões de placa (faixa escura no alto), marcador em placa amarela,
8
+ citação e frase com a barra de aviso, número grande dentro de uma placa */
9
+ .th-sinal .hd{border-left:14px solid var(--hi);padding-left:30px}
10
+ .th-sinal :is(.card,.stat-card){border-top:12px solid var(--fg);border-radius:0 0 var(--radius) var(--radius)}
11
+ .th-sinal .li-n{background:var(--hi);color:var(--on-hi);padding:8px 14px 2px;text-align:center}
12
+ .th-sinal .li-b{border-radius:0;transform:translateY(-.08em) rotate(45deg)}
13
+ .th-sinal .L-quote{border-left:14px solid var(--hi);padding-left:60px}
14
+ .th-sinal .q-mark{display:none}
15
+ .th-sinal .nb-val{align-self:flex-start;border:12px solid currentColor;border-radius:var(--radius);padding:14px 40px 0;margin:10px 0 6px}
16
+ .th-sinal .L-statement{border-left:14px solid var(--hi);padding-left:60px}
@@ -0,0 +1,23 @@
1
+ /* Terminal: todo slide é uma janela (barra com três bolinhas e o caminho), chapéu com prompt, capa no alto */
2
+ .th-terminal .orn i:nth-child(1){display:block;left:0;right:0;top:0;height:54px;background:var(--surface);border-bottom:1px solid var(--line)}
3
+ .th-terminal .orn i:nth-child(2){display:block;left:28px;top:19px;width:16px;height:16px;border-radius:50%;background:var(--em);box-shadow:26px 0 var(--hi),52px 0 var(--muted)}
4
+ .th-terminal .orn i:nth-child(3){display:block;left:0;right:0;top:17px;text-align:center;font:18px/1 "Cascadia Mono",Consolas,monospace;color:var(--muted)}
5
+ .th-terminal .orn i:nth-child(3)::after{content:"~/apresentacao"}
6
+ .th-terminal .kicker::before{content:"> ";color:var(--hi)}
7
+ .th-terminal .L-cover .cv-main,.th-terminal .L-end .en-main{justify-content:flex-start}
8
+ .th-terminal .sc-num::before{content:"#";opacity:.4}
9
+ .th-terminal .headbar{top:70px}
10
+ /* conteúdo: título como comando ($) sobre linha tracejada, cartões como janelinhas (barra no alto), lista [01],
11
+ marcador em cursor, citação e frase com a barra do prompt, número grande num painel */
12
+ .th-terminal .hd{border-bottom:1px dashed var(--line);padding-bottom:22px}
13
+ .th-terminal .hd .ttl::before{content:"$ ";color:var(--hi)}
14
+ .th-terminal :is(.card:not(.card-hi),.stat-card){background:transparent;border:1px solid var(--line);border-top:34px solid var(--surface);border-radius:6px}
15
+ .th-terminal .li-n::before{content:"[";opacity:.5}
16
+ .th-terminal .li-n::after{content:"]";opacity:.5}
17
+ .th-terminal .li-b{border:0;border-radius:0;background:var(--hi);width:16px;height:30px}
18
+ .th-terminal .L-quote{border-left:4px solid var(--hi);padding-left:50px}
19
+ .th-terminal .q-mark{display:none}
20
+ .th-terminal .nb-val{align-self:flex-start;background:var(--surface);border:1px solid var(--line);padding:20px 40px 0;margin:10px 0 6px}
21
+ .th-terminal .st-body{border-left:4px solid var(--hi);padding-left:40px}
22
+ /* botão Voltar (navegação por caminhos) fora da barra/moldura do tema */
23
+ .th-terminal .nav-back{top:9px;left:120px}
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2013-2020 Khan Academy and other contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 - 2022 Knut Sveidqvist
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2016-2024 Plotly Technologies Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.