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,1262 @@
1
+ /* ==========================================================================
2
+ SagaDeck Studio — interface no padrão de editores de escritório (Fluent/Office):
3
+ barra de título · faixa de opções com abas · slides | slide | painel · barra de status
4
+ ========================================================================== */
5
+
6
+ :root {
7
+ /* superfícies */
8
+ --chrome: #ffffff;
9
+ --chrome-2: #f7f7f7;
10
+ --canvas-bg: #e9e9ec;
11
+ --hover: #f0f0f0;
12
+ --pressed: #e4e4e4;
13
+ --selected: #ebf3fc;
14
+ --ui-line: #e1e1e1;
15
+ --ui-line-strong: #c8c8c8;
16
+ /* texto */
17
+ --text: #242424;
18
+ --text-2: #5c5c5c;
19
+ --text-3: #8a8a8a;
20
+ /* marca e estados */
21
+ --brand: #0f6cbd;
22
+ --brand-hover: #115ea3;
23
+ --brand-soft: #ebf3fc;
24
+ --ok: #107c10;
25
+ --warn: #bc4b09;
26
+ --err: #c50f1f;
27
+ --brand-fill: #0f6cbd;
28
+ --brand-fill-hover: #115ea3;
29
+ --on-brand: #ffffff;
30
+ --ui-line-hover: #999999;
31
+ --label-bg: rgba(255, 255, 255, .92);
32
+ --ok-soft: #e6f4e6;
33
+ --warn-soft: #fdf0e6;
34
+ --scrim-light: rgba(255, 255, 255, .85);
35
+ --toast-bg: #2b2b2b;
36
+ --toast-text: #ffffff;
37
+ --ui-radius: 6px;
38
+ --shadow-1: 0 1px 2px rgba(0, 0, 0, .08), 0 0 1px rgba(0, 0, 0, .12);
39
+ --shadow-2: 0 4px 16px rgba(0, 0, 0, .12), 0 0 2px rgba(0, 0, 0, .12);
40
+ --shadow-3: 0 12px 40px rgba(0, 0, 0, .18), 0 0 2px rgba(0, 0, 0, .12);
41
+ --font-sans: "Segoe UI Variable", "Segoe UI", -apple-system, BlinkMacSystemFont, Roboto, "Helvetica Neue", Arial, sans-serif;
42
+ --font-mono: ui-monospace, "Cascadia Mono", Consolas, Menlo, monospace;
43
+
44
+ /* nomes antigos ainda usados por estilos inline do app.js */
45
+ --bg-app: var(--canvas-bg);
46
+ --bg-panel: var(--chrome);
47
+ --bg-card: var(--chrome-2);
48
+ --bg-card-hover: var(--hover);
49
+ --bg-input: var(--chrome);
50
+ --border-color: var(--ui-line);
51
+ --border-active: var(--ui-line-strong);
52
+ --text-main: var(--text);
53
+ --text-muted: var(--text-2);
54
+ --text-dim: var(--text-3);
55
+ --primary: var(--brand);
56
+ --primary-hover: var(--brand-hover);
57
+ --accent: var(--brand);
58
+ --success: var(--ok);
59
+ --warning: var(--warn);
60
+ --danger: var(--err);
61
+ }
62
+
63
+ * { box-sizing: border-box; margin: 0; padding: 0; }
64
+ html, body { height: 100%; }
65
+ body {
66
+ font-family: var(--font-sans);
67
+ font-size: 13px;
68
+ color: var(--text);
69
+ background: var(--canvas-bg);
70
+ display: grid;
71
+ grid-template-rows: auto auto auto 1fr auto;
72
+ grid-template-columns: minmax(0, 1fr);
73
+ overflow: hidden;
74
+ -webkit-font-smoothing: antialiased;
75
+ }
76
+ button, input, select, textarea { font: inherit; color: inherit; }
77
+ button { cursor: pointer; background: none; border: 0; }
78
+ .hidden { display: none !important; }
79
+ .visually-hidden { position: absolute !important; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
80
+ .muted { color: var(--text-3); }
81
+ .spacer { flex: 1; }
82
+ :focus-visible { outline: 2px solid var(--brand); outline-offset: 1px; }
83
+
84
+ /* ícones da interface (Lucide, via ui-icons.js) */
85
+ .ic { display: inline-flex; width: 16px; height: 16px; flex-shrink: 0; }
86
+ .ic svg { width: 100%; height: 100%; fill: none; stroke: currentColor; stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; }
87
+
88
+ /* ---------------- botões genéricos ---------------- */
89
+ .btn {
90
+ display: inline-flex; align-items: center; justify-content: center; gap: 6px;
91
+ height: 32px; padding: 0 14px; border-radius: var(--ui-radius);
92
+ font-weight: 600; white-space: nowrap; transition: background .12s, border-color .12s;
93
+ }
94
+ .btn-primary { background: var(--brand-fill); color: var(--on-brand); }
95
+ .btn-primary:hover { background: var(--brand-fill-hover); }
96
+ .btn-secondary { background: var(--chrome); border: 1px solid var(--ui-line-strong); }
97
+ .btn-secondary:hover { background: var(--hover); }
98
+ .btn:disabled { opacity: .5; cursor: default; }
99
+ .btn-small { height: 26px; padding: 0 10px; font-size: 12px; font-weight: 500; border: 1px solid var(--ui-line-strong); border-radius: var(--ui-radius); background: var(--chrome); }
100
+ .btn-small:hover { background: var(--hover); }
101
+ .link-btn { color: var(--brand); padding: 0 2px; }
102
+ .link-btn:hover { text-decoration: underline; }
103
+ .icon-btn {
104
+ display: inline-flex; align-items: center; justify-content: center;
105
+ width: 30px; height: 30px; border-radius: var(--ui-radius); color: var(--text-2);
106
+ }
107
+ .icon-btn:hover { background: var(--hover); color: var(--text); }
108
+ .icon-btn-sm { width: 24px; height: 24px; }
109
+ .icon-btn-primary { background: var(--brand-fill); color: var(--on-brand); }
110
+ .icon-btn-primary:hover { background: var(--brand-fill-hover); color: var(--on-brand); }
111
+ .icon-btn:disabled { opacity: .45; cursor: wait; }
112
+
113
+ /* ---------------- menus e popovers ---------------- */
114
+ .menu, .popover {
115
+ position: absolute; z-index: 400; display: none;
116
+ background: var(--chrome); border-radius: 8px; box-shadow: var(--shadow-2);
117
+ padding: 4px;
118
+ }
119
+ .show > .menu, .popover.open { display: block; }
120
+ .menu { min-width: 220px; }
121
+ .menu-item {
122
+ display: flex; align-items: center; gap: 10px; width: 100%;
123
+ padding: 7px 10px; border-radius: 4px; text-align: left; text-decoration: none; color: var(--text);
124
+ }
125
+ .menu-item:hover { background: var(--hover); }
126
+ .menu-item .ic { color: var(--text-2); }
127
+ .menu-sep { height: 1px; background: var(--ui-line); margin: 4px 0; }
128
+ .popover { position: fixed; padding: 12px; }
129
+ .popover-title { font-size: 12px; font-weight: 600; color: var(--text-2); margin-bottom: 8px; }
130
+ .popover-wrap { position: relative; }
131
+
132
+ /* ==========================================================================
133
+ BARRA DE TÍTULO
134
+ ========================================================================== */
135
+ .titlebar {
136
+ display: flex; align-items: center; gap: 10px;
137
+ height: 48px; padding: 0 12px; background: var(--chrome); border-bottom: 1px solid var(--ui-line);
138
+ }
139
+ .app-mark { width: 28px; height: 28px; border-radius: 6px; display: grid; place-items: center; background: #c43e1c; color: #fff; }
140
+ .app-mark .ic { width: 16px; height: 16px; }
141
+ .app-mark .saga-mark { width: 22px; height: 22px; } /* o mesmo logotipo da biblioteca */
142
+ .doc-title {
143
+ min-width: 120px; max-width: 360px; flex: 0 1 auto;
144
+ height: 30px; padding: 0 8px; border: 1px solid transparent; border-radius: 4px;
145
+ font-size: 14px; font-weight: 600; background: transparent;
146
+ }
147
+ .doc-title:hover { border-color: var(--ui-line-strong); }
148
+ .doc-title:focus { border-color: var(--brand); outline: none; background: var(--chrome); }
149
+ .save-status { font-size: 12px; color: var(--text-3); white-space: nowrap; }
150
+ .save-status.unsaved { color: var(--warn); }
151
+ .search-box {
152
+ margin: 0 auto; display: flex; align-items: center; gap: 8px;
153
+ width: min(420px, 36vw); height: 32px; padding: 0 10px;
154
+ background: var(--chrome-2); border: 1px solid var(--ui-line); border-radius: var(--ui-radius); color: var(--text-3);
155
+ }
156
+ .search-box:hover { border-color: var(--ui-line-strong); background: var(--chrome); }
157
+ .search-box span { flex: 1; text-align: left; }
158
+ kbd { font-family: var(--font-sans); font-size: 11px; color: var(--text-3); border: 1px solid var(--ui-line-strong); border-radius: 4px; padding: 0 5px; }
159
+ .split-button { position: relative; display: flex; }
160
+ .split-button #btn-present, .split-button #btn-present-menu { height: 40px; min-height: 40px; align-self: center; }
161
+ .split-button #btn-present { border-radius: var(--ui-radius) 0 0 var(--ui-radius); }
162
+ .split-button .btn-caret { width: 40px; padding: 0; border-radius: 0 var(--ui-radius) var(--ui-radius) 0; border-left: 1px solid rgba(255, 255, 255, .35); }
163
+ .split-button.show > .menu { display: block; right: 0; top: calc(100% + 4px); }
164
+
165
+ /* ==========================================================================
166
+ FAIXA DE OPÇÕES
167
+ ========================================================================== */
168
+ .ribbon-tabs {
169
+ display: flex; align-items: flex-end; gap: 2px; height: 36px; padding: 0 8px;
170
+ background: var(--chrome); overflow-x: auto; scrollbar-width: none;
171
+ }
172
+ .ribbon-tab {
173
+ position: relative; height: 34px; padding: 0 12px; border-radius: 4px 4px 0 0;
174
+ color: var(--text-2); white-space: nowrap;
175
+ }
176
+ .ribbon-tab:hover { background: var(--hover); color: var(--text); }
177
+ .ribbon-tab.active { color: var(--brand); font-weight: 600; }
178
+ /* modo simples: ferramentas de especialista guardadas até a pessoa pedir "Mais opções" */
179
+ /* ferramentas de especialista: sempre à vista, no fim da aba (à direita), separadas por um traço */
180
+ .ribbon-panel > .rgroup[data-adv] { order: 50; }
181
+ .ribbon-panel > .rgroup[data-adv]:not(.ribbon-panel > .rgroup[data-adv] ~ .rgroup[data-adv]) { border-left: 1px solid var(--ui-line); } /* logo depois dos outros grupos, nada de ir parar na outra ponta */
182
+ .ribbon-more { margin-left: auto; align-self: center; display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 10px; border-radius: 999px; color: var(--text-2); font-size: 12px; white-space: nowrap; }
183
+ .ribbon-more:hover { background: var(--hover); color: var(--text); }
184
+ .ribbon-more[aria-pressed="true"] { color: var(--brand); }
185
+ .ribbon-more .ic, .ribbon-more .ic svg { width: 14px; height: 14px; }
186
+ .ribbon-tab.active::after { content: ""; position: absolute; left: 12px; right: 12px; bottom: 0; height: 3px; border-radius: 2px; background: var(--brand); }
187
+ .file-menu-wrap { position: relative; }
188
+ .file-tab { color: var(--brand); font-weight: 600; }
189
+ .file-menu-wrap > .menu { position: fixed; }
190
+
191
+ .ribbon {
192
+ position: relative; z-index: 20;
193
+ height: 92px; padding: 6px 8px 0; background: var(--chrome);
194
+ border-bottom: 1px solid var(--ui-line); box-shadow: 0 1px 2px rgba(0, 0, 0, .04);
195
+ }
196
+ .ribbon-panel { display: none; height: 100%; align-items: stretch; overflow-x: auto; overflow-y: hidden; scrollbar-width: thin; }
197
+ .ribbon-panel.active { display: flex; }
198
+ .rgroup { display: flex; flex-direction: column; padding: 0 8px; border-right: 1px solid var(--ui-line); flex-shrink: 0; }
199
+ .rgroup:last-child { border-right: 0; }
200
+ .rgroup-grow { flex: 1; min-width: 0; }
201
+ /* temas e paletas dividem o espaço que sobra, cada um com a sua rolagem: uma lista comprida não espreme a outra até sumir */
202
+ .rgroup-gallery { flex: 1 1 0; min-width: 134px; } /* encolhe até 1 cartão inteiro + a coluna de controles (notebook, janela estreita, zoom) */
203
+ .rgroup-gallery .rgroup-body { min-width: 0; }
204
+ .rgroup-gallery .theme-gallery { flex: 1; min-width: 0; }
205
+ .rrow { display: flex; align-items: center; gap: 2px; }
206
+ .rbtn-icon { width: 30px; padding: 0; justify-content: center; }
207
+ .rgroup-body { flex: 1; display: flex; align-items: flex-start; gap: 2px; min-height: 0; }
208
+ .rgroup-label { height: 20px; line-height: 20px; font-size: 11px; color: var(--text-3); text-align: center; white-space: nowrap; }
209
+ .rgroup-fields { flex-direction: column; justify-content: center; gap: 6px; padding-top: 2px; }
210
+ .rstack { display: flex; flex-direction: column; gap: 2px; }
211
+
212
+ .rbtn {
213
+ position: relative; display: inline-flex; align-items: center; gap: 6px;
214
+ height: 30px; padding: 0 8px; border-radius: 4px; color: var(--text); white-space: nowrap;
215
+ }
216
+ .rbtn:hover { background: var(--hover); }
217
+ .rbtn:active { background: var(--pressed); }
218
+ .rbtn.active { background: var(--selected); color: var(--brand); }
219
+ .rbtn .ic { color: var(--text-2); }
220
+ .rbtn.active .ic { color: var(--brand); }
221
+ .rbtn-lg { flex-direction: column; justify-content: flex-start; gap: 4px; min-width: 56px; height: 64px; padding: 6px 6px 4px; font-size: 12px; line-height: 1.15; text-align: center; }
222
+ .rbtn-lg > .ic { width: 24px; height: 24px; }
223
+ .rbtn-lg > span { display: inline-flex; align-items: center; gap: 2px; }
224
+ .rbtn .caret { width: 12px; height: 12px; }
225
+ .rfield { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--text-2); }
226
+ .rfield > span { min-width: 44px; }
227
+ .rnote { font-size: 11px; color: var(--text-2); max-width: 230px; line-height: 1.25; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
228
+ .rnote.warn { color: #b45309; }
229
+ .rselect, .form-control {
230
+ height: 28px; padding: 0 8px; border: 1px solid var(--ui-line-strong); border-radius: 4px; background: var(--chrome);
231
+ }
232
+ .rselect { min-width: 130px; }
233
+ .rselect:hover, .form-control:hover { border-color: var(--ui-line-hover); }
234
+ .rselect:focus, .form-control:focus { outline: none; border-color: var(--brand); box-shadow: inset 0 -1px 0 var(--brand); }
235
+ .rcheck { display: flex; align-items: center; gap: 8px; font-size: 12px; cursor: pointer; }
236
+ .rcheck input, .check-sm input { accent-color: var(--brand); }
237
+
238
+ .fiscal-badge {
239
+ position: absolute; top: 2px; right: 6px; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px;
240
+ font-size: 11px; line-height: 18px; text-align: center; font-weight: 700; color: #fff; background: var(--warn);
241
+ }
242
+ .fiscal-badge.clean { display: none; }
243
+
244
+ /* galeria de layouts */
245
+ .layout-popover { width: min(1000px, calc(100vw - 16px)); max-height: min(70vh, 640px); overflow-y: auto; }
246
+ .layout-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 4px; }
247
+ .layout-chip {
248
+ padding: 8px; border-radius: 4px; border: 1px solid transparent; font-size: 12px; cursor: pointer;
249
+ }
250
+ .layout-chip:hover { background: var(--hover); }
251
+ .layout-chip.active { background: var(--selected); border-color: var(--brand); color: var(--brand); font-weight: 600; }
252
+
253
+ /* galeria de temas */
254
+ .theme-gallery { display: flex; gap: 8px; overflow-x: auto; padding: 2px 2px 2px; scrollbar-width: thin; }
255
+ .theme-card {
256
+ flex: 0 0 auto; width: 104px; height: 60px; border-radius: 6px; overflow: hidden; cursor: pointer;
257
+ border: 2px solid transparent; box-shadow: var(--shadow-1); position: relative; text-align: left;
258
+ }
259
+ .theme-card:hover { border-color: var(--ui-line-strong); }
260
+ .theme-card.active { border-color: var(--brand); }
261
+ .theme-card .tc-aa { position: absolute; left: 8px; top: 6px; font-size: 18px; font-weight: 700; }
262
+ .theme-card .tc-bar { position: absolute; left: 8px; top: 32px; width: 28px; height: 5px; border-radius: 3px; }
263
+ .theme-card .tc-name { position: absolute; left: 0; right: 0; bottom: 0; padding: 2px 8px; font-size: 11px; background: var(--label-bg); color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
264
+
265
+ /* ritmo narrativo */
266
+ .arc-popover { width: min(300px, calc(100vw - 16px)); }
267
+ .story-arc-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 6px; }
268
+ .story-arc-svg { display: block; width: 100%; height: 40px; overflow: visible; color: var(--brand); }
269
+ #story-arc-dot { fill: var(--brand); stroke: var(--chrome); stroke-width: 1.5; }
270
+ .arc-badge { font-size: 11px; font-weight: 600; padding: 1px 8px; border-radius: 10px; }
271
+ .arc-badge.ok { background: var(--ok-soft); color: var(--ok); }
272
+ .arc-badge.warn { background: var(--warn-soft); color: var(--warn); }
273
+ .arc-recommendation { margin-top: 6px; font-size: 12px; color: var(--text-2); line-height: 1.4; }
274
+
275
+ /* ==========================================================================
276
+ ÁREA DE TRABALHO
277
+ ========================================================================== */
278
+ .workspace {
279
+ display: grid; grid-template-columns: 208px minmax(0, 1fr) auto; min-height: 0;
280
+ }
281
+
282
+ /* --- miniaturas --- */
283
+ .slide-rail { display: flex; flex-direction: column; min-height: 0; background: var(--chrome-2); border-right: 1px solid var(--ui-line); }
284
+ .rail-header { display: flex; align-items: center; justify-content: space-between; height: 36px; padding: 0 8px 0 12px; font-weight: 600; color: var(--text-2); font-size: 12px; }
285
+ .thumb-list { flex: 1; overflow-y: auto; padding: 4px 10px 16px 4px; }
286
+ .thumb-card { position: relative; display: grid; grid-template-columns: 22px 1fr; gap: 4px; padding: 6px 0; cursor: pointer; }
287
+ .thumb-header { display: contents; }
288
+ .thumb-num { grid-column: 1; font-size: 11px; color: var(--text-3); text-align: right; padding-top: 2px; }
289
+ .thumb-badge { display: none; }
290
+ .thumb-screen {
291
+ grid-column: 2; position: relative; aspect-ratio: var(--aspect, 16 / 9); overflow: hidden;
292
+ background: #fff; border-radius: 3px; box-shadow: var(--shadow-1); outline: 2px solid transparent; outline-offset: 1px;
293
+ }
294
+ .thumb-card:hover .thumb-screen { outline-color: var(--ui-line-strong); }
295
+ .thumb-card.active .thumb-screen { outline-color: var(--brand); }
296
+ .thumb-card.active .thumb-num { color: var(--brand); font-weight: 700; }
297
+ .thumb-render { position: absolute; left: 0; top: 0; width: 1920px; height: var(--sh, 1080px); transform-origin: 0 0; transform: scale(var(--thumb-scale, .09)); pointer-events: none; }
298
+ .thumb-render .slide { opacity: 1 !important; visibility: visible !important; }
299
+ .thumb-render mark { background-size: 100% 92% !important; transition: none !important; }
300
+ .thumb-fallback { position: absolute; inset: 0; display: grid; place-items: center; padding: 8px; font-size: 11px; color: var(--text-3); text-align: center; }
301
+ .thumb-actions { position: absolute; right: 4px; top: 10px; display: none; flex-direction: column; gap: 2px; z-index: 2; }
302
+ .thumb-card:hover .thumb-actions { display: flex; }
303
+ .btn-thumb-action { width: 22px; height: 22px; border-radius: 4px; background: var(--chrome); box-shadow: var(--shadow-1); font-size: 12px; color: var(--text-2); }
304
+ .btn-thumb-action:hover { color: var(--brand); }
305
+
306
+ /* --- slide atual --- */
307
+ .editor { display: flex; flex-direction: column; min-width: 0; min-height: 0; }
308
+ .canvas-viewport { flex: 1; position: relative; display: flex; align-items: center; justify-content: center; overflow: auto; background: var(--canvas-bg); min-height: 0; }
309
+ .stage-16-9 {
310
+ position: absolute; width: 1920px; height: var(--sh, 1080px); transform-origin: center center;
311
+ background: #fff; overflow: hidden; box-shadow: 0 2px 6px rgba(0, 0, 0, .12), 0 8px 32px rgba(0, 0, 0, .10);
312
+ }
313
+ #rendered-slide-container { position: relative; width: 100%; height: 100%; }
314
+ #rendered-slide-container .slide { opacity: 1 !important; visibility: visible !important; }
315
+ #slide-stage mark { background-size: 100% 92%; transition: none; }
316
+
317
+ .safe-guides-layer { position: absolute; inset: 0; pointer-events: none; z-index: 10; }
318
+ .safe-box { position: absolute; left: 120px; right: 120px; top: 92px; bottom: 104px; border: 2px dashed rgba(15, 108, 189, .35); border-radius: 4px; }
319
+ .inspector-layer { position: absolute; inset: 0; pointer-events: none; z-index: 20; }
320
+ .issue-bounding-box { position: absolute; border: 3px dashed var(--err); background: rgba(197, 15, 31, .08); border-radius: 4px; pointer-events: auto; }
321
+ .issue-bounding-box.issue-info { pointer-events: none; } /* aviso de leitura: não bloqueia o clique para editar o texto */
322
+ .issue-tag { position: absolute; top: -34px; left: 0; background: var(--err); color: #fff; font-size: 18px; font-weight: 600; padding: 3px 10px; border-radius: 4px; white-space: nowrap; }
323
+ [contenteditable="true"] { outline: none; cursor: text; border-radius: 4px; transition: box-shadow .12s; }
324
+ [contenteditable="true"]:hover { box-shadow: 0 0 0 3px rgba(15, 108, 189, .35); }
325
+ [contenteditable="true"]:focus { box-shadow: 0 0 0 4px var(--brand); }
326
+ .squint-mode #rendered-slide-container { filter: blur(3.5px) contrast(1.15) !important; }
327
+ .heatmap-layer { position: absolute; inset: 0; pointer-events: none; z-index: 15; mix-blend-mode: multiply; opacity: .75; }
328
+ .heat-spot { position: absolute; border-radius: 50%; filter: blur(35px); }
329
+ .heat-spot.high { background: radial-gradient(circle, rgba(239, 68, 68, .85) 0%, rgba(245, 158, 11, .6) 45%, transparent 75%); }
330
+ .heat-spot.medium { background: radial-gradient(circle, rgba(245, 158, 11, .7) 0%, rgba(59, 130, 246, .4) 50%, transparent 75%); }
331
+
332
+ .alchemy-pill {
333
+ position: absolute; z-index: 30; display: flex; align-items: center; gap: 8px;
334
+ padding: 8px 10px; background: var(--chrome); border-radius: 10px; box-shadow: var(--shadow-3); font-size: 22px;
335
+ }
336
+ .alchemy-label .ic { width: 26px; height: 26px; color: var(--brand); }
337
+ .alchemy-btn-group { display: flex; gap: 6px; }
338
+ .btn-alchemy { padding: 6px 14px; border-radius: 6px; border: 1px solid var(--ui-line-strong); background: var(--chrome); font-size: 20px; white-space: nowrap; }
339
+ .btn-alchemy:hover { background: var(--selected); border-color: var(--brand); color: var(--brand); }
340
+
341
+ /* --- YAML e anotações --- */
342
+ .yaml-drawer { height: 240px; display: flex; flex-direction: column; background: var(--chrome); border-top: 1px solid var(--ui-line); }
343
+ .drawer-header { display: flex; align-items: center; justify-content: space-between; height: 32px; padding: 0 6px 0 12px; font-size: 12px; font-weight: 600; color: var(--text-2); }
344
+ .drawer-header > span { display: inline-flex; align-items: center; gap: 6px; }
345
+ .yaml-status { flex: 1; margin-left: 12px; font-weight: 400; color: var(--ok); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
346
+ .yaml-status.error { color: var(--err); }
347
+
348
+ .notes-bar { height: 96px; background: var(--chrome); border-top: 1px solid var(--ui-line); display: grid; grid-template-columns: 1fr 1fr; }
349
+ .notes-consulta { border-left: 1px solid var(--ui-line) !important; }
350
+ .notes-input { width: 100%; height: 100%; resize: none; border: 0; outline: none; padding: 10px 16px; font-size: 13px; line-height: 1.5; background: transparent; }
351
+ .notes-input::placeholder { color: var(--text-3); }
352
+
353
+ /* --- painel lateral --- */
354
+ .task-pane { width: 360px; display: flex; flex-direction: column; min-height: 0; background: var(--chrome); border-left: 1px solid var(--ui-line); }
355
+ .task-pane.collapsed { display: none; }
356
+ .pane-header { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 8px 8px 8px 12px; border-bottom: 1px solid var(--ui-line); }
357
+ .segmented { display: flex; padding: 2px; border-radius: 6px; background: var(--chrome-2); border: 1px solid var(--ui-line); }
358
+ .seg { display: inline-flex; align-items: center; gap: 6px; height: 26px; padding: 0 12px; border-radius: 4px; color: var(--text-2); font-weight: 500; position: relative; }
359
+ .seg.active { background: var(--chrome); color: var(--text); box-shadow: var(--shadow-1); font-weight: 600; }
360
+ .seg .ic { width: 14px; height: 14px; color: var(--brand); }
361
+ .chat-badge-dot { display: none; }
362
+ .tab-panel { display: none; flex: 1; flex-direction: column; min-height: 0; }
363
+ .tab-panel.active { display: flex; }
364
+ #tab-panel-props { overflow-y: auto; padding: 14px 16px 24px; gap: 16px; }
365
+
366
+ .fields-form { display: flex; flex-direction: column; gap: 12px; }
367
+ .field-group { display: flex; flex-direction: column; gap: 4px; }
368
+ .field-group label, .field-label { font-size: 12px; font-weight: 600; color: var(--text-2); }
369
+ .field-group .form-control, .fields-form textarea.form-control { width: 100%; }
370
+ textarea.form-control { height: auto; min-height: 64px; padding: 6px 8px; resize: vertical; line-height: 1.4; }
371
+ .form-control-sm { height: 26px; font-size: 12px; }
372
+ .pane-section { display: flex; flex-direction: column; gap: 6px; padding-top: 12px; border-top: 1px solid var(--ui-line); }
373
+ .pane-section-head { display: flex; align-items: center; justify-content: space-between; font-size: 12px; font-weight: 600; color: var(--text-2); }
374
+ .inline-field { display: flex; align-items: center; gap: 8px; }
375
+ .inline-field .form-control { width: 80px; }
376
+
377
+ /* --- assistente (chat) --- */
378
+ .chat-options { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-bottom: 1px solid var(--ui-line); }
379
+ .chat-options select { flex: 1; }
380
+ .check-sm { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--text-2); white-space: nowrap; cursor: pointer; }
381
+ .chat-history { flex: 1; overflow-y: auto; padding: 12px; display: flex; flex-direction: column; gap: 12px; }
382
+ .chat-empty { margin: auto 0; text-align: center; color: var(--text-2); display: flex; flex-direction: column; align-items: center; gap: 10px; padding: 0 12px; }
383
+ .chat-empty > .ic { width: 32px; height: 32px; color: var(--brand); }
384
+ .chat-start-guide { max-width: 36ch; margin: 0; color: var(--text-3); font-size: 12px; line-height: 1.5; }
385
+ .chat-suggestions { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px; }
386
+ .chip-prompt { padding: 5px 12px; border-radius: 14px; border: 1px solid var(--ui-line-strong); background: var(--chrome); font-size: 12px; }
387
+ .chip-prompt:hover { border-color: var(--brand); color: var(--brand); background: var(--brand-soft); }
388
+ .ai-msg, .user-msg { display: flex; gap: 8px; align-items: flex-start; }
389
+ .user-msg { flex-direction: row-reverse; }
390
+ .ai-avatar, .user-avatar { width: 24px; height: 24px; border-radius: 50%; flex-shrink: 0; display: grid; place-items: center; font-size: 11px; font-weight: 700; }
391
+ .ai-avatar { background: var(--brand-soft); color: var(--brand); }
392
+ .user-avatar { background: var(--chrome-2); color: var(--text-2); border: 1px solid var(--ui-line); font-size: 9px; }
393
+ .ai-content, .user-content { max-width: 86%; padding: 8px 12px; border-radius: 10px; line-height: 1.45; font-size: 13px; overflow-wrap: anywhere; }
394
+ .ai-content { background: var(--chrome-2); border: 1px solid var(--ui-line); border-top-left-radius: 2px; }
395
+ .user-content { background: var(--brand-fill); color: var(--on-brand); border-top-right-radius: 2px; }
396
+ .action-badge-pill { display: inline-block; margin: 6px 4px 0 0; padding: 2px 8px; border-radius: 10px; font-size: 11px; background: var(--ok-soft); color: var(--ok); }
397
+ .work-line { display: flex; align-items: center; gap: 8px; }
398
+ .work-stop { margin-left: auto; }
399
+ .work-text { flex: 1; }
400
+ .work-time { font-variant-numeric: tabular-nums; color: var(--text-3); font-size: 12px; }
401
+ .work-dots { display: inline-flex; gap: 3px; }
402
+ .work-dots i { width: 6px; height: 6px; border-radius: 50%; background: var(--brand); animation: work-bounce 1s infinite ease-in-out; }
403
+ .work-dots i:nth-child(2) { animation-delay: .15s; }
404
+ .work-dots i:nth-child(3) { animation-delay: .3s; }
405
+ @keyframes work-bounce { 0%, 80%, 100% { opacity: .25; transform: translateY(0); } 40% { opacity: 1; transform: translateY(-3px); } }
406
+ .work-preview { margin-top: 6px; font-size: 12px; color: var(--text-3); white-space: pre-wrap; max-height: 90px; overflow: hidden; }
407
+ .work-preview:empty { display: none; }
408
+ .chat-input-bar { display: flex; flex-direction: column; gap: 6px; padding: 10px 12px 12px; border-top: 1px solid var(--ui-line); }
409
+ .chat-field { flex: 1; min-height: 34px; max-height: 180px; padding: 7px 10px; border: 1px solid var(--ui-line-strong); border-radius: var(--ui-radius); resize: none; line-height: 1.4; }
410
+ .chat-field:focus { outline: none; border-color: var(--brand); }
411
+ .chat-field:disabled { background: var(--chrome-2); }
412
+
413
+ /* ==========================================================================
414
+ BARRA DE STATUS
415
+ ========================================================================== */
416
+ .statusbar {
417
+ display: flex; align-items: center; gap: 4px; height: 28px; padding: 0 8px 0 12px;
418
+ background: var(--chrome); border-top: 1px solid var(--ui-line); font-size: 12px; color: var(--text-2);
419
+ }
420
+ .status-item { display: inline-flex; align-items: center; gap: 5px; height: 22px; padding: 0 8px; border-radius: 4px; white-space: nowrap; }
421
+ .status-item:empty { display: none; }
422
+ #current-slide-label { padding-right: 8px; }
423
+ .status-btn:hover { background: var(--hover); }
424
+ .status-btn .ic { width: 14px; height: 14px; }
425
+ .status-btn.active { color: var(--brand); }
426
+ .anti-sleep-warn { color: var(--warn); font-weight: 600; }
427
+ #status-issues.warn { color: var(--warn); font-weight: 600; }
428
+ #ai-status::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: var(--text-3); }
429
+ #ai-status.on::before { background: var(--ok); }
430
+ #ai-status.off::before { background: var(--warn); }
431
+ .zoom-ctrl { display: flex; align-items: center; gap: 2px; margin-left: 6px; }
432
+ #zoom-level { width: 40px; text-align: center; font-variant-numeric: tabular-nums; }
433
+
434
+ /* ==========================================================================
435
+ DIÁLOGOS
436
+ ========================================================================== */
437
+ .modal-dialog-overlay { position: fixed; inset: 0; z-index: 1500; display: flex; align-items: center; justify-content: center; background: rgba(0, 0, 0, .32); }
438
+ .modal-dialog-box { width: min(480px, 92vw); max-height: 88vh; display: flex; flex-direction: column; background: var(--chrome); border-radius: 8px; box-shadow: var(--shadow-3); overflow: hidden; }
439
+ .modal-md { width: min(600px, 92vw); }
440
+ .modal-lg { width: min(720px, 92vw); }
441
+ .api-envs-dialog { width: min(1120px, 96vw); height: min(92dvh, 1000px); max-height: 92dvh; }
442
+ .api-envs-body { flex: 1; min-height: 0; }
443
+ .api-envs-safety { padding: 8px 10px; border-left: 3px solid var(--brand); background: var(--chrome-2); font-size: 12px; }
444
+ .api-envs-body #api-envs-text { min-height: min(52dvh, 560px); }
445
+ .modal-dialog-header { display: flex; align-items: center; justify-content: space-between; padding: 16px 16px 8px 20px; }
446
+ .modal-dialog-header h3 { font-size: 18px; font-weight: 600; }
447
+ .modal-dialog-body { padding: 8px 20px 16px; display: flex; flex-direction: column; gap: 10px; overflow-y: auto; }
448
+ .modal-dialog-body .form-control { width: 100%; }
449
+ .modal-dialog-footer { display: flex; align-items: center; justify-content: flex-end; gap: 8px; padding: 12px 20px 16px; }
450
+ .form-row { display: flex; align-items: flex-end; gap: 14px; flex-wrap: wrap; }
451
+ .form-row .field-label { display: flex; flex-direction: column; gap: 4px; }
452
+ .form-row input[type="number"] { width: 80px; }
453
+ .form-inline { display: flex; gap: 8px; align-items: center; }
454
+ .form-inline .form-control { flex: 1; min-width: 0; }
455
+ .status-line { min-height: 18px; font-size: 12px; color: var(--brand); }
456
+
457
+ .preset-row { display: flex; align-items: center; gap: 8px; font-size: 12px; flex-wrap: wrap; }
458
+ .napkin-preview { border: 1px solid var(--ui-line); border-radius: var(--ui-radius); padding: 10px 12px; background: var(--chrome-2); }
459
+ .napkin-preview-head { display: flex; align-items: center; gap: 10px; margin-bottom: 6px; font-size: 12px; }
460
+ .tag { padding: 2px 8px; border-radius: 10px; background: var(--brand-soft); color: var(--brand); font-weight: 700; font-size: 11px; text-transform: uppercase; }
461
+ #napkin-yaml-preview { max-height: 160px; overflow: auto; font-family: var(--font-mono); font-size: 12px; }
462
+
463
+ /* ícones */
464
+ .icon-picker-dialog { width: min(760px, 94vw); }
465
+ .icon-picker-body { gap: 12px; }
466
+ .search-field { display: flex; align-items: center; gap: 8px; height: 34px; padding: 0 10px; border: 1px solid var(--ui-line-strong); border-radius: var(--ui-radius); }
467
+ .search-field:focus-within { border-color: var(--brand); }
468
+ .search-field input { flex: 1; border: 0; outline: none; background: transparent; }
469
+ .search-field .ic { color: var(--text-3); }
470
+ .icon-category-chips { display: flex; gap: 6px; overflow-x: auto; }
471
+ .chip-cat { padding: 4px 12px; border-radius: 14px; border: 1px solid var(--ui-line-strong); font-size: 12px; white-space: nowrap; }
472
+ .chip-cat:hover { background: var(--hover); }
473
+ .chip-cat.active { background: var(--brand-fill); border-color: var(--brand-fill); color: var(--on-brand); }
474
+ .icons-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(84px, 1fr)); gap: 6px; max-height: 360px; overflow-y: auto; padding: 2px; }
475
+ .icon-card { display: flex; flex-direction: column; align-items: center; gap: 6px; padding: 10px 4px; border: 1px solid transparent; border-radius: 6px; cursor: pointer; }
476
+ .icon-card:hover { background: var(--hover); }
477
+ .icon-card.selected { background: var(--selected); border-color: var(--brand); }
478
+ .icon-svg-wrapper { width: 30px; height: 30px; display: grid; place-items: center; color: var(--text); }
479
+ .icon-card-name { width: 100%; font-size: 11px; color: var(--text-2); text-align: center; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
480
+ .icon-preview-footer { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding-top: 12px; border-top: 1px solid var(--ui-line); flex-wrap: wrap; }
481
+ .icon-preview-left { display: flex; align-items: center; gap: 10px; }
482
+ .icon-preview-svg-box { width: 40px; height: 40px; display: grid; place-items: center; border-radius: 6px; background: var(--selected); color: var(--brand); }
483
+ .icon-preview-actions { display: flex; gap: 8px; flex-wrap: wrap; }
484
+
485
+ /* busca de comandos */
486
+ .palette-overlay { position: fixed; inset: 0; z-index: 2500; display: flex; justify-content: center; align-items: flex-start; padding-top: 12vh; background: rgba(0, 0, 0, .25); }
487
+ .palette-box { width: min(560px, 92vw); background: var(--chrome); border-radius: 8px; box-shadow: var(--shadow-3); overflow: hidden; }
488
+ .palette-input-wrap { display: flex; align-items: center; gap: 10px; padding: 12px 14px; border-bottom: 1px solid var(--ui-line); color: var(--text-3); }
489
+ .palette-input { flex: 1; border: 0; outline: none; font-size: 15px; color: var(--text); }
490
+ .palette-results { max-height: 340px; overflow-y: auto; padding: 4px; }
491
+ .palette-item { display: flex; align-items: center; justify-content: space-between; padding: 8px 10px; border-radius: 4px; cursor: pointer; }
492
+ .palette-item:hover, .palette-item.selected { background: var(--selected); }
493
+ .palette-item-left { display: flex; align-items: center; gap: 10px; }
494
+ .palette-icon { width: 20px; text-align: center; }
495
+ .palette-item-category { font-size: 11px; color: var(--text-3); }
496
+
497
+ .drop-overlay { position: fixed; inset: 0; z-index: 3000; display: grid; place-items: center; background: var(--scrim-light); pointer-events: none; }
498
+ .drop-box { display: flex; flex-direction: column; align-items: center; gap: 12px; padding: 40px 64px; border: 2px dashed var(--brand); border-radius: 12px; font-size: 16px; color: var(--brand); background: var(--brand-soft); }
499
+ .drop-box .ic { width: 40px; height: 40px; }
500
+
501
+ .toast {
502
+ position: fixed; left: 50%; bottom: 44px; transform: translateX(-50%); z-index: 2000;
503
+ max-width: min(640px, 92vw); padding: 10px 16px; border-radius: 6px; background: var(--toast-bg); color: var(--toast-text); box-shadow: var(--shadow-2); font-size: 13px; line-height: 1.4;
504
+ }
505
+
506
+ /* ==========================================================================
507
+ MODO APRESENTAÇÃO (escuro, tela cheia)
508
+ ========================================================================== */
509
+ .modal-fullscreen { position: fixed; inset: 0; z-index: 1000; display: flex; align-items: center; justify-content: center; background: #000; }
510
+ .btn-close-modal { position: absolute; top: 18px; right: 24px; z-index: 1010; width: 36px; height: 36px; border-radius: 50%; background: rgba(255, 255, 255, .15); color: #fff; font-size: 16px; }
511
+ .btn-close-modal:hover { background: rgba(255, 255, 255, .3); }
512
+ .pres-frame { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; background: #000; }
513
+ .btn-close-modal { opacity: .25; transition: opacity .2s; }
514
+ .btn-close-modal:hover, .btn-close-modal:focus-visible { opacity: 1; }
515
+
516
+ /* ==========================================================================
517
+ TELAS MENORES
518
+ ========================================================================== */
519
+ .mobile-nav-bar { display: none; }
520
+
521
+ /* notebook estreito: só o ícone nos botões pequenos da faixa */
522
+ @media (max-width: 1440px) { .ribbon .rnote { max-width: 150px; } } /* notebook: sobra lugar para 3 temas e 3 paletas; o texto inteiro fica no title */
523
+ @media (max-width: 1180px) {
524
+ .workspace { grid-template-columns: 172px minmax(0, 1fr) auto; }
525
+ .task-pane { width: 290px; }
526
+ .search-box span { display: none; }
527
+ .search-box { width: auto; margin-left: auto; margin-right: 0; }
528
+ .rstack .rbtn span { display: none; }
529
+ }
530
+
531
+ /* celular / tablet em pé: slides e painel viram gavetas; navegação no rodapé */
532
+ @media (max-width: 900px) {
533
+ body { grid-template-rows: auto auto auto 1fr auto; }
534
+ .titlebar { height: 44px; gap: 6px; }
535
+ .save-status, .search-box kbd, #btn-present-menu { display: none; }
536
+ .split-button #btn-present { border-radius: var(--ui-radius); }
537
+ #btn-present .lbl { display: none; }
538
+ .ribbon { height: 84px; }
539
+ .rbtn-lg { min-width: 52px; }
540
+ .rgroup-gallery .theme-card { height: 52px; } /* cabe na faixa mais baixa, com o rótulo do grupo */
541
+ .workspace { grid-template-columns: minmax(0, 1fr); position: relative; }
542
+ .slide-rail, .task-pane {
543
+ position: absolute; top: 0; bottom: 0; z-index: 60; box-shadow: var(--shadow-3);
544
+ transition: transform .2s ease;
545
+ }
546
+ .slide-rail { left: 0; width: 220px; transform: translateX(-105%); }
547
+ .task-pane { right: 0; width: min(360px, 92vw); transform: translateX(105%); }
548
+ .task-pane.collapsed { display: flex; }
549
+ .slide-rail.mobile-open, .task-pane.mobile-open { transform: none; }
550
+ .notes-bar { height: 72px; }
551
+ .statusbar { display: none; }
552
+ .mobile-nav-bar {
553
+ display: flex; justify-content: space-around; height: 56px; background: var(--chrome); border-top: 1px solid var(--ui-line);
554
+ padding-bottom: env(safe-area-inset-bottom);
555
+ }
556
+ .mobile-nav-btn { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; font-size: 11px; color: var(--text-2); }
557
+ .mobile-nav-btn .ic { width: 20px; height: 20px; }
558
+ .mobile-nav-primary { color: var(--brand); font-weight: 600; }
559
+ }
560
+
561
+
562
+ /* ==========================================================================
563
+ TEMA ESCURO (html[data-theme="dark"]; "automático" segue o sistema — ver o script no <head>)
564
+ Só as cores da interface mudam: o slide mantém o tema da apresentação.
565
+ ========================================================================== */
566
+ :root { color-scheme: light; }
567
+ :root[data-theme="dark"] {
568
+ color-scheme: dark;
569
+ --chrome: #292929;
570
+ --chrome-2: #1f1f1f;
571
+ --canvas-bg: #141414;
572
+ --hover: #383838;
573
+ --pressed: #2e2e2e;
574
+ --selected: #1e2f45;
575
+ --ui-line: #3b3b3b;
576
+ --ui-line-strong: #575757;
577
+ --ui-line-hover: #7a7a7a;
578
+ --text: #f0f0f0;
579
+ --text-2: #c7c7c7;
580
+ --text-3: #999999;
581
+ --brand: #62abf5;
582
+ --brand-hover: #82bcf7;
583
+ --brand-soft: #1e2f45;
584
+ --brand-fill: #1a6fbf;
585
+ --brand-fill-hover: #2886de;
586
+ --on-brand: #ffffff;
587
+ --ok: #6ccb5f;
588
+ --warn: #f4a45b;
589
+ --err: #f1707b;
590
+ --ok-soft: #1f3a1d;
591
+ --warn-soft: #3d2a17;
592
+ --label-bg: rgba(31, 31, 31, .9);
593
+ --scrim-light: rgba(20, 20, 20, .85);
594
+ --toast-bg: #f0f0f0;
595
+ --toast-text: #1b1b1b;
596
+ --shadow-1: 0 1px 2px rgba(0, 0, 0, .5), 0 0 1px rgba(0, 0, 0, .6);
597
+ --shadow-2: 0 4px 16px rgba(0, 0, 0, .55), 0 0 2px rgba(0, 0, 0, .6);
598
+ --shadow-3: 0 12px 40px rgba(0, 0, 0, .65), 0 0 2px rgba(0, 0, 0, .6);
599
+ }
600
+ :root[data-theme="dark"] .ribbon { box-shadow: none; }
601
+ :root[data-theme="dark"] .stage-16-9 { box-shadow: 0 0 0 2px rgba(255, 255, 255, .14), 0 8px 32px rgba(0, 0, 0, .45); }
602
+ :root[data-theme="dark"] .modal-dialog-overlay { background: rgba(0, 0, 0, .55); }
603
+ :root[data-theme="dark"] .palette-overlay { background: rgba(0, 0, 0, .5); }
604
+ :root[data-theme="dark"] .thumb-screen { background: #000; box-shadow: 0 0 0 1px rgba(255, 255, 255, .14); }
605
+
606
+ /* ==========================================================================
607
+ EDITOR VISUAL DO SLIDE (slide-form.js)
608
+ ========================================================================== */
609
+ .sf-field { display: flex; flex-direction: column; gap: 4px; }
610
+ .sf-label { font-size: 12px; font-weight: 600; color: var(--text-2); }
611
+ .sf-hint { font-size: 11px; color: var(--text-3); line-height: 1.35; }
612
+ .sf-field .form-control, .sf-ctl .form-control { width: 100%; }
613
+ .sf-narrow .form-control { width: 120px; }
614
+ .sf-inline { display: flex; gap: 6px; align-items: center; }
615
+ .sf-inline .form-control { flex: 1; min-width: 0; }
616
+ .sf-check { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--text); cursor: pointer; }
617
+ .sf-check input { accent-color: var(--brand); }
618
+ .form-control.mono, textarea.mono { font-family: var(--font-mono); font-size: 12px; }
619
+ .form-control.invalid { border-color: var(--err); box-shadow: inset 0 -1px 0 var(--err); }
620
+ .fields-form > * + *, .sf-item-body > * + *, .sf-stack > * + *, .sf-object > * + *, .sf-more > div > * + * { margin-top: 12px; }
621
+ .fields-form { gap: 0; }
622
+ .sf-list { display: flex; flex-direction: column; gap: 6px; }
623
+ .sf-list-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; min-height: 26px; }
624
+ .sf-kind-add { width: auto; max-width: 150px; }
625
+ .sf-item { border: 1px solid var(--ui-line); border-radius: var(--ui-radius); background: var(--chrome-2); }
626
+ .sf-item-simple { display: flex; align-items: center; gap: 4px; padding: 4px 4px 4px 6px; }
627
+ .sf-item-simple .form-control { flex: 1; min-width: 0; background: var(--chrome); }
628
+ .sf-item-head { display: flex; align-items: center; gap: 4px; padding: 2px 4px 2px 2px; }
629
+ .sf-item-toggle { flex: 1; min-width: 0; display: flex; align-items: center; gap: 6px; height: 30px; padding: 0 6px; border-radius: 4px; text-align: left; }
630
+ .sf-item-toggle:hover { background: var(--hover); }
631
+ .sf-item-toggle .ic { width: 14px; height: 14px; color: var(--text-3); transform: rotate(-90deg); transition: transform .15s; }
632
+ .sf-item.open > .sf-item-head .sf-item-toggle .ic { transform: none; }
633
+ .sf-item-title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; }
634
+ .sf-item-head select { width: auto; max-width: 130px; }
635
+ .sf-item-ctl { display: flex; gap: 0; }
636
+ .sf-item-body { display: none; padding: 8px 10px 12px; border-top: 1px solid var(--ui-line); background: var(--chrome); border-radius: 0 0 var(--ui-radius) var(--ui-radius); }
637
+ .sf-item.open > .sf-item-body { display: block; }
638
+ .sf-object { border: 1px solid var(--ui-line); border-radius: var(--ui-radius); padding: 8px 10px 12px; }
639
+ .sf-object > legend { padding: 0 4px; font-size: 12px; font-weight: 600; color: var(--text-2); }
640
+ .sf-more > summary { cursor: pointer; font-size: 12px; font-weight: 600; color: var(--brand); padding: 4px 0; list-style: none; }
641
+ .sf-more > summary::-webkit-details-marker { display: none; }
642
+ .sf-more > summary::before { content: ""; display: inline-block; width: 0; height: 0; margin: 0 7px 1px 1px; border-left: 5px solid currentColor; border-top: 4px solid transparent; border-bottom: 4px solid transparent; transition: transform .15s; }
643
+ .sf-more[open] > summary::before { transform: rotate(90deg); }
644
+ .sf-more > div { padding: 4px 0 4px 10px; border-left: 2px solid var(--ui-line); }
645
+ .sf-more > .sf-field, .sf-more > .sf-check, .sf-more > .sf-list, .sf-more > fieldset { margin: 12px 0 0 10px; }
646
+
647
+ /* seletor de cliques do slide (barra de status) */
648
+ .step-control { display: inline-flex; align-items: center; gap: 2px; margin-left: 8px; }
649
+ .step-control[hidden] { display: none; }
650
+ .step-lbl { margin-right: 4px; color: var(--text-3); }
651
+ .step-btn { min-width: 24px; height: 22px; padding: 0 6px; border-radius: 4px; font-size: 12px; color: var(--text-2); }
652
+ .step-btn:hover { background: var(--hover); }
653
+ .step-btn.active { background: var(--brand-soft); color: var(--brand); font-weight: 600; }
654
+ /* miniaturas: sempre o slide completo (tudo o que entra por clique) */
655
+ .thumb-render [data-step] { opacity: 1 !important; transform: none !important; }
656
+
657
+ /* chat: compor mensagem com anexos */
658
+ .chat-compose { display: flex; align-items: flex-end; gap: 4px; }
659
+ .chat-attachments { display: flex; flex-wrap: wrap; gap: 6px; }
660
+ .chat-attachments[hidden] { display: none; }
661
+ .chat-att { position: relative; width: 64px; height: 44px; border-radius: 4px; overflow: hidden; border: 1px solid var(--ui-line); }
662
+ .chat-att img { width: 100%; height: 100%; object-fit: cover; }
663
+ .chat-att button { position: absolute; top: 2px; right: 2px; width: 18px; height: 18px; border-radius: 50%; background: rgba(0, 0, 0, .6); color: #fff; font-size: 11px; line-height: 18px; }
664
+ .msg-atts { display: flex; gap: 4px; margin-top: 6px; flex-wrap: wrap; }
665
+ .msg-atts img { width: 72px; height: 48px; object-fit: cover; border-radius: 4px; border: 1px solid rgba(255, 255, 255, .4); }
666
+ .chat-att:has(.chat-doc) { width: auto; height: auto; padding: 6px 26px 6px 8px; }
667
+ .chat-doc { display: inline-flex; align-items: center; gap: 6px; font-size: 11px; color: var(--text); }
668
+ .chat-doc .ic { width: 14px; height: 14px; color: var(--text-2); }
669
+ .chat-doc b { font-weight: 600; max-width: 180px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
670
+ .chat-doc small { color: var(--text-3); white-space: nowrap; }
671
+ .msg-doc { display: inline-flex; align-items: center; gap: 4px; font-size: 11px; padding: 3px 8px; border-radius: 10px; background: rgba(255, 255, 255, .16); }
672
+ .msg-doc .ic { width: 12px; height: 12px; }
673
+
674
+ /* mudanças automáticas: banner no painel, marca nas miniaturas */
675
+ .auto-banner { border: 1px solid var(--warn); background: var(--warn-soft); border-radius: var(--ui-radius); padding: 10px 12px; font-size: 12px; }
676
+ .auto-banner[hidden] { display: none; }
677
+ .auto-banner h4 { display: flex; align-items: center; gap: 6px; font-size: 12px; margin-bottom: 4px; color: var(--warn); }
678
+ .auto-banner p.hint { color: var(--text-2); margin-bottom: 8px; line-height: 1.4; }
679
+ .auto-item { display: grid; grid-template-columns: 1fr auto; gap: 4px 8px; padding: 6px 0; border-top: 1px solid color-mix(in srgb, var(--warn) 30%, transparent); }
680
+ .auto-item .what { font-weight: 600; }
681
+ .auto-item .why { grid-column: 1 / -1; color: var(--text-2); line-height: 1.35; }
682
+ .auto-item .was { grid-column: 1 / -1; color: var(--text-3); font-style: italic; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
683
+ .auto-item .acts { display: flex; gap: 4px; }
684
+ .thumb-auto { position: absolute; left: 26px; bottom: 10px; z-index: 2; font-size: 11px; padding: 0 5px; border-radius: 8px; background: var(--warn); color: #fff; }
685
+ #status-fit { color: var(--text-3); }
686
+
687
+ /* barra de formatação flutuante (edição direta no slide) */
688
+ .format-bar { position: fixed; z-index: 300; display: flex; align-items: center; gap: 2px; padding: 4px; background: var(--chrome); border-radius: 8px; box-shadow: var(--shadow-2); flex-wrap: wrap; max-width: min(720px, 96vw); }
689
+ .format-bar button { height: 28px; min-width: 28px; padding: 0 8px; border-radius: 4px; font-size: 13px; color: var(--text); }
690
+ .format-bar button:hover { background: var(--hover); }
691
+ .fb-sep { width: 1px; height: 20px; background: var(--ui-line); margin: 0 4px; }
692
+ .fb-mark { background: linear-gradient(#ffd54a, #ffd54a) no-repeat 0 60% / 100% 70%; color: #111; padding: 0 3px; }
693
+ .fb-em { color: var(--brand); font-weight: 700; }
694
+ .format-bar .alchemy-pill { position: static !important; display: flex; align-items: center; gap: 4px; padding: 0; background: none; box-shadow: none; font-size: 12px; }
695
+ .format-bar .alchemy-pill.hidden { display: none; }
696
+ .format-bar .alchemy-label { color: var(--text-3); font-size: 12px; }
697
+ .format-bar .btn-alchemy { font-size: 12px; padding: 3px 8px; }
698
+
699
+ /* gaveta de YAML: realce de sintaxe (pre por trás de uma textarea transparente) */
700
+ .yaml-code { position: relative; flex: 1; min-height: 0; background: var(--chrome); }
701
+ .yaml-hl, .yaml-editor { position: absolute; inset: 0; margin: 0; padding: 8px 14px 12px; font-family: var(--font-mono); font-size: 12.5px; line-height: 1.55; white-space: pre; tab-size: 2; overflow: auto; border: 0; }
702
+ .yaml-hl { pointer-events: none; color: var(--text); }
703
+ .yaml-editor { resize: none; outline: none; background: transparent; color: transparent; caret-color: var(--text); }
704
+ .yaml-editor::selection { background: color-mix(in srgb, var(--brand) 30%, transparent); color: transparent; }
705
+ .yh-key { color: #0b6bcb; }
706
+ .yh-str { color: #a15c00; }
707
+ .yh-num { color: #0a7d4f; }
708
+ .yh-bool { color: #8b2fc9; }
709
+ .yh-com { color: #7d8590; font-style: italic; }
710
+ .yh-sep { color: var(--brand); font-weight: 700; font-style: normal; }
711
+ .yh-mk { background: color-mix(in srgb, #ffd54a 45%, transparent); border-radius: 2px; }
712
+ .yh-dash { color: var(--text-3); }
713
+ :root[data-theme="dark"] .yh-key { color: #6cb6ff; }
714
+ :root[data-theme="dark"] .yh-str { color: #f0b86e; }
715
+ :root[data-theme="dark"] .yh-num { color: #56d364; }
716
+ :root[data-theme="dark"] .yh-bool { color: #d2a8ff; }
717
+ .segmented-sm .seg { height: 22px; padding: 0 8px; font-size: 12px; }
718
+ .drawer-header { gap: 10px; }
719
+
720
+ /* galeria de layouts com prévia */
721
+ .layout-grid { grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 12px; }
722
+ .layout-card { display: flex; flex-direction: column; gap: 4px; padding: 6px; border-radius: 6px; border: 2px solid transparent; text-align: left; }
723
+ .layout-card:hover { background: var(--hover); }
724
+ .layout-card.active { border-color: var(--brand); background: var(--selected); }
725
+ .lc-prev { position: relative; aspect-ratio: var(--aspect, 16 / 9); overflow: hidden; border-radius: 4px; background: #fff; box-shadow: var(--shadow-1); --thumb-scale: .12; }
726
+ .lc-prev .thumb-render { transform: scale(var(--thumb-scale)); }
727
+ .lc-name { font-size: 12px; font-weight: 600; }
728
+ .lc-desc { font-size: 11px; color: var(--text-3); line-height: 1.3; min-height: 2.6em; }
729
+
730
+ /* Tom / Fundo com prévia */
731
+ .vpick-btn { display: inline-flex; align-items: center; gap: 8px; min-width: 130px; height: 28px; padding: 0 8px; border: 1px solid var(--ui-line-strong); border-radius: 4px; background: var(--chrome); color: var(--text); font-size: 12px; }
732
+ .vpick-btn:hover { border-color: var(--ui-line-hover); }
733
+ .vpick-btn .caret { margin-left: auto; }
734
+ .vpick-sw { width: 16px; height: 16px; border-radius: 3px; border: 1px solid var(--ui-line); flex: none; background: #fff; }
735
+ .sw-tone-dark { background: #1d1d1f; }
736
+ .sw-tone-accent { background: var(--brand); }
737
+ .sw-tone-alert { background: #c62828; }
738
+ .sw-deco-grid { background-image: linear-gradient(#bbb 1px, transparent 1px), linear-gradient(90deg, #bbb 1px, transparent 1px); background-size: 5px 5px; }
739
+ .sw-deco-dots, .sw-deco-sketch { background-image: radial-gradient(#999 1px, transparent 1px); background-size: 4px 4px; }
740
+ .sw-deco-grain { background: #eee8dc; }
741
+ .sw-deco-glow { background: radial-gradient(circle at 80% 20%, #9cc2ff, #fff 70%); }
742
+ .sw-deco-aurora { background: linear-gradient(135deg, #7ff 0%, #b7f 50%, #f7b 100%); }
743
+ .sw-deco-silver { background: linear-gradient(180deg, #fff, #cfd1d6); }
744
+ .variant-popover { width: min(560px, calc(100vw - 16px)); max-height: min(70vh, 600px); overflow-y: auto; }
745
+ .variant-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 10px; }
746
+ .variant-card { display: flex; flex-direction: column; gap: 4px; padding: 6px; border-radius: 6px; border: 2px solid transparent; text-align: left; background: none; color: inherit; }
747
+ .variant-card:hover { background: var(--hover); }
748
+ .variant-card.active { border-color: var(--brand); background: var(--selected); }
749
+ .variant-card .lc-prev { --thumb-scale: .0775; }
750
+
751
+ /* arrastar miniaturas para reordenar */
752
+ .thumb-card.dragging { opacity: .4; }
753
+ .thumb-card.drop-before { box-shadow: 0 -3px 0 0 var(--brand); }
754
+ .thumb-card.drop-after { box-shadow: 0 3px 0 0 var(--brand); }
755
+
756
+ /* Diagrama de texto: texto + formatos à esquerda, resultado desenhado à direita */
757
+ .modal-xl { width: min(1180px, 96vw); }
758
+ .napkin-body { display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr); gap: 20px; overflow: auto; }
759
+ .napkin-left, .napkin-right { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
760
+ .napkin-label { font-size: 12px; font-weight: 600; color: var(--text-2); margin-top: 4px; }
761
+ .napkin-label .muted { font-weight: 400; }
762
+ textarea.form-control.napkin-input { min-height: 220px; resize: vertical; font-family: var(--font-ui, inherit); font-size: 14px; line-height: 1.5; padding: 10px 12px; }
763
+ .napkin-types { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 9px; }
764
+ .napkin-type { display: flex; flex-direction: column; gap: 5px; padding: 6px; border: 2px solid transparent; border-radius: 8px; background: none; color: inherit; text-align: left; }
765
+ .napkin-type:hover { background: var(--hover); }
766
+ .napkin-type.active { border-color: var(--brand); background: var(--selected); }
767
+ .napkin-type .lc-prev { --thumb-scale: .085; border-radius: 5px; }
768
+ .napkin-type .lc-name { font-size: 12px; font-weight: 550; }
769
+ .nt-auto { display: flex; align-items: center; justify-content: center; background: var(--chrome-2) !important; color: var(--brand); }
770
+ .nt-auto .ic { width: 22px; height: 22px; }
771
+ .napkin-examples { display: grid; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: 6px; }
772
+ .napkin-example { display: flex; flex-direction: column; gap: 2px; padding: 8px 10px; border: 1px solid var(--ui-line); border-radius: 6px; background: var(--chrome); color: inherit; text-align: left; font-size: 12px; }
773
+ .napkin-example:hover { border-color: var(--brand); }
774
+ .napkin-example span { color: var(--text-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
775
+ .napkin-stage { position: relative; aspect-ratio: var(--aspect, 16 / 9); overflow: hidden; border-radius: 6px; background: var(--canvas-bg); box-shadow: var(--shadow-1); --thumb-scale: .28; }
776
+ .napkin-stage .thumb-render { transform: scale(var(--thumb-scale)); }
777
+ .napkin-stage.loading::after { content: "Gerando…"; position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; background: color-mix(in srgb, var(--chrome) 70%, transparent); font-weight: 600; }
778
+ .napkin-empty { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; color: var(--text-3); font-size: 13px; padding: 20px; text-align: center; }
779
+ .napkin-preview details summary { cursor: pointer; font-size: 12px; color: var(--text-2); margin-top: 6px; }
780
+ @media (max-width: 820px) { .napkin-body { grid-template-columns: 1fr; } }
781
+
782
+ /* Cabeçalho e rodapé */
783
+ .hf-body { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr); gap: 20px; overflow: auto; }
784
+ .hf-left, .hf-right { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
785
+ .hf-presets { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; }
786
+ .hf-preset { display: flex; flex-direction: column; gap: 2px; padding: 8px 10px; border: 1px solid var(--ui-line); border-radius: 6px; background: var(--chrome); color: inherit; text-align: left; font-size: 12px; }
787
+ .hf-preset:hover { border-color: var(--brand); }
788
+ .hf-preset.active { border-color: var(--brand); background: var(--selected); }
789
+ .hf-preset span { color: var(--text-3); }
790
+ .hf-deck { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
791
+ .hf-deck label { display: flex; flex-direction: column; gap: 3px; font-size: 12px; color: var(--text-2); }
792
+ .hf-tokens { display: flex; flex-wrap: wrap; gap: 4px; }
793
+ .hf-token { padding: 2px 8px; border: 1px solid var(--ui-line); border-radius: 999px; background: var(--chrome-2); color: var(--text-2); font-size: 11.5px; }
794
+ .hf-token:hover { border-color: var(--brand); color: var(--brand); }
795
+ .hf-grid { display: grid; grid-template-columns: auto 1fr 1fr 1fr; gap: 6px; align-items: center; }
796
+ .hf-grid input { font-family: var(--font-mono); font-size: 12px; }
797
+ .hf-row { font-size: 12px; color: var(--text-2); }
798
+ .hf-note { font-size: 11.5px; margin: 0; }
799
+ @media (max-width: 820px) { .hf-body { grid-template-columns: 1fr; } .hf-presets { grid-template-columns: 1fr 1fr; } }
800
+
801
+ /* Assistente: modos Editar | Ideias */
802
+ .btn-sm { height: 26px; padding: 0 10px; font-size: 12px; }
803
+ .bs-options { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
804
+ .bs-option { padding: 4px 10px; border: 1px solid var(--brand); border-radius: 999px; background: transparent; color: var(--brand); font-size: 12px; text-align: left; }
805
+ .bs-option:hover:not(:disabled) { background: var(--selected); }
806
+ .bs-option:disabled { opacity: .5; }
807
+ .ai-msg.bs .ai-avatar { background: #8b5cf6; }
808
+ .bs-tag { font-size: 11px; color: var(--text-3); margin-bottom: 4px; }
809
+ #btn-brainstorm-apply { margin-left: auto; }
810
+
811
+ /* versões de um slide para escolher */
812
+ .variants { display: grid; grid-template-columns: 1fr; gap: 10px; margin-top: 10px; }
813
+ .variant { border: 1px solid var(--ui-line); border-radius: 6px; overflow: hidden; background: var(--chrome); }
814
+ .variant.chosen { border-color: var(--brand); box-shadow: 0 0 0 1px var(--brand); }
815
+ .variant-prev { position: relative; aspect-ratio: var(--aspect, 16 / 9); overflow: hidden; background: var(--canvas-bg); --thumb-scale: .14; }
816
+ .variant-prev .thumb-render { transform: scale(var(--thumb-scale)); }
817
+ .variant-foot { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 6px 8px; font-size: 12px; }
818
+ .arc-problems { margin: 6px 0 8px; padding-left: 16px; font-size: 12px; color: var(--text-2); }
819
+ .arc-problems:empty { display: none; }
820
+ .chat-options:has(> .hidden:only-child) { display: none; } /* só o "Pode fazer" escondido: sem barra vazia */
821
+
822
+ /* ícone do canto = volta para a biblioteca */
823
+ .app-mark-link { text-decoration: none; cursor: pointer; }
824
+ .app-mark-link:hover { filter: brightness(1.12); }
825
+
826
+ /* ---------------- slides de API: exemplos e ambientes ---------------- */
827
+ .sf-hint.sf-error { color: var(--err); }
828
+ .sf-hint.sf-error:empty { display: none; }
829
+ .api-envs-body { display: flex; flex-direction: column; gap: 8px; }
830
+ .api-envs-intro { margin: 0; font-size: 12.5px; line-height: 1.45; }
831
+ .api-envs-body code { font-family: var(--font-mono); font-size: 11.5px; }
832
+ .api-envs-list { display: flex; flex-wrap: wrap; gap: 6px; }
833
+ .env-chip { display: inline-flex; align-items: center; gap: 6px; height: 30px; padding: 0 12px; border-radius: 15px; border: 1px solid var(--ui-line-strong); color: var(--text); font-weight: 600; font-size: 12.5px; }
834
+ .env-chip:hover { background: var(--hover); }
835
+ .env-chip.active { background: var(--selected); border-color: var(--brand); color: var(--brand); }
836
+ .env-chip small { font-weight: 400; color: var(--text-3); }
837
+ #api-envs-text { min-height: 260px; resize: vertical; white-space: pre; tab-size: 2; }
838
+ .api-envs-status.err { color: var(--err); }
839
+ .api-envs-status.ok { color: var(--ok, var(--text-2)); }
840
+ .studio-vars-panel { overflow-y: auto; padding: 14px 16px 24px; gap: 16px; }
841
+ .studio-vars-intro { margin: 0 0 12px; color: var(--text-2); font-size: 13px; line-height: 1.55; }
842
+ .studio-var-section + .studio-var-section { margin-top: 20px; }
843
+ .studio-var-section h4 { margin: 0 0 8px; font-size: 14px; }
844
+ .studio-var-section-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 8px; }
845
+ .studio-var-section-head h4 { margin: 0; }
846
+ .studio-var-table-wrap { overflow: auto; border: 1px solid var(--ui-line); border-radius: 7px; }
847
+ .studio-var-table { width: 100%; border-collapse: collapse; table-layout: fixed; }
848
+ .studio-var-table th, .studio-var-table td { padding: 7px 8px; border-bottom: 1px solid var(--ui-line); text-align: left; vertical-align: middle; }
849
+ .studio-var-table th { position: sticky; top: 0; z-index: 1; background: var(--chrome-2); color: var(--text-2); font-size: 11px; font-weight: 600; }
850
+ .studio-var-table tr:last-child td { border-bottom: 0; }
851
+ .studio-var-table th:first-child, .studio-var-table td:first-child { width: 38%; }
852
+ .studio-var-table th:last-child, .studio-var-table td:last-child { width: 72px; text-align: right; }
853
+ .studio-var-table input { min-width: 0; width: 100%; height: 30px; padding: 4px 7px; border: 1px solid transparent; border-radius: 4px; background: transparent; color: var(--text); font: 12px var(--font-mono); }
854
+ .studio-var-table input[data-var-value] { font-family: var(--font-sans); }
855
+ .studio-var-table input:focus { border-color: var(--brand); outline: none; background: var(--chrome); }
856
+ .studio-var-table input:disabled { color: var(--text-2); opacity: 1; }
857
+ .studio-var-table [data-studio-drag-var] { cursor: grab; }
858
+ .studio-var-table [data-studio-drag-var]:active { cursor: grabbing; }
859
+ .studio-var-table .btn { min-height: 26px; height: 26px; padding: 0 7px; font-size: 11px; }
860
+ .studio-var-row.drag-over td { background: var(--selected); }
861
+ .studio-env-group + .studio-env-group { margin-top: 14px; }
862
+ .studio-env-group h5 { display: flex; align-items: center; gap: 8px; margin: 0 0 6px; color: var(--text-2); font-size: 11px; letter-spacing: .04em; text-transform: uppercase; }
863
+ .studio-env-group h5 span { padding: 2px 6px; border-radius: 8px; background: var(--selected); color: var(--brand); font-size: 9px; letter-spacing: 0; }
864
+ .studio-var-empty { color: var(--text-3); font-size: 11px; line-height: 1.4; }
865
+ .studio-var-actions { display: flex; flex: none; gap: 5px; }
866
+ .studio-var-row .btn { min-height: 28px; padding: 3px 9px; font-size: 11px; }
867
+ .studio-var-empty { margin: 6px 0; }
868
+ .task-pane .pane-header .segmented { min-width: 0; }
869
+ .task-pane .pane-header .seg { padding: 0 8px; font-size: 11px; gap: 5px; white-space: nowrap; }
870
+ .task-pane .pane-header .seg:not(.active) .seg-label { display: none; }
871
+ .task-pane .pane-header .seg .ic { flex: none; }
872
+ .toast { display: flex; align-items: center; gap: 14px; }
873
+ .toast.hidden { display: none; }
874
+ .toast-action { flex: none; padding: 4px 10px; border: 1px solid currentColor; border-radius: 5px; background: none; color: inherit; font: inherit; font-weight: 700; cursor: pointer; }
875
+ .toast-action:hover { background: rgba(255, 255, 255, .12); }
876
+ .thumb-list:focus { outline: none; }
877
+ .thumb-list:focus-visible .thumb-card.active, .thumb-list:focus .thumb-card.active { box-shadow: 0 0 0 2px var(--brand); }
878
+
879
+ /* paletas (só cores) e o menu do botão direito em temas/paletas */
880
+ .palette-card { background: var(--surface-2, #f3f3f3); }
881
+ .palette-card .pc-sw { position: absolute; left: 8px; right: 8px; top: 8px; height: 26px; display: flex; border-radius: 4px; overflow: hidden; }
882
+ .palette-card .pc-sw i { flex: 1; }
883
+ .palette-card .pc-sw .ic { flex: none; width: 22px; height: 22px; color: var(--text-2); }
884
+ .theme-card.slide-only::after { content: ""; position: absolute; top: 4px; right: 4px; width: 10px; height: 10px; border-radius: 50%; background: var(--brand); box-shadow: 0 0 0 2px #fff; }
885
+ .look-menu { position: fixed; z-index: 1000; min-width: 250px; padding: 4px; background: var(--chrome); border: 1px solid var(--ui-line-strong); border-radius: 8px; box-shadow: var(--shadow-2, 0 8px 24px rgba(0,0,0,.18)); display: flex; flex-direction: column; }
886
+ .look-menu.hidden { display: none; }
887
+ /* prévia de tema/paleta ao passar o mouse */
888
+ .look-preview-badge { position: absolute; left: 50%; top: 12px; transform: translateX(-50%); z-index: 30; padding: 6px 14px; border-radius: 999px; background: var(--brand); color: #fff; font-size: 12px; font-weight: 600; box-shadow: var(--shadow-2, 0 4px 14px rgba(0,0,0,.2)); pointer-events: none; white-space: nowrap; }
889
+ .look-preview-badge.hidden { display: none; }
890
+ .look-menu button { display: flex; align-items: center; gap: 10px; padding: 8px 10px; border-radius: 5px; text-align: left; color: var(--text); background: none; border: 0; font: inherit; cursor: pointer; }
891
+ .look-menu button:hover, .look-menu button:focus-visible { background: var(--hover); outline: none; }
892
+ .look-menu .ic { width: 16px; height: 16px; }
893
+
894
+ .bs-option-other { display: inline-flex; align-items: center; gap: 6px; opacity: .85; }
895
+ .bs-option-other .ic { width: 14px; height: 14px; }
896
+
897
+ /* fiscal: problema do slide + correções à mão */
898
+ .fix-panel { margin: 10px auto 0; max-width: 980px; padding: 10px 14px; border: 1px solid #e5a50a; border-left-width: 4px; border-radius: 8px; background: color-mix(in srgb, #e5a50a 12%, var(--chrome)); color: var(--text); font-size: 13px; }
899
+ .fix-panel.hidden { display: none; }
900
+ .fix-head { display: flex; align-items: center; gap: 8px; }
901
+ .fix-head .ic { width: 16px; height: 16px; color: #b7791f; }
902
+ .fix-panel ul { margin: 4px 0 8px 24px; padding: 0; color: var(--text-2); }
903
+ .fix-actions { display: flex; flex-wrap: wrap; gap: 6px; }
904
+ .fix-btn { display: inline-flex; align-items: center; gap: 6px; padding: 5px 10px; border-radius: 6px; border: 1px solid var(--ui-line-strong); background: var(--chrome); color: var(--text); font: inherit; cursor: pointer; }
905
+ .fix-btn.primary { background: var(--brand); border-color: var(--brand); color: #fff; }
906
+ .fix-btn .ic { width: 14px; height: 14px; }
907
+
908
+ /* comandos da IA no chat: o código aparece antes de rodar */
909
+ .cmd-msg .ai-content { max-width: 100%; }
910
+ .cmd-head { display: flex; align-items: center; gap: 6px; }
911
+ .cmd-head .ic svg { width: 15px; height: 15px; }
912
+ .cmd-why { margin: 4px 0 6px; color: var(--text-2); }
913
+ .cmd-code, .cmd-out pre { margin: 0; max-height: 220px; overflow: auto; padding: 8px 10px; border-radius: 6px; background: var(--chrome-3, rgba(0,0,0,.06)); font: 12px/1.45 "Cascadia Mono", Consolas, monospace; white-space: pre-wrap; }
914
+ .cmd-actions { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
915
+ .cmd-actions .btn { font-size: 12px; padding: 4px 10px; }
916
+ .cmd-state { font-size: 12px; color: var(--text-2); }
917
+ .cmd-state.cmd-bad { color: var(--danger); }
918
+ .cmd-cost { font-size: 12px; font-weight: 700; color: #b7791f; margin: 6px 0 2px; }
919
+ .cmd-out { margin-top: 6px; font-size: 12px; }
920
+ .cmd-out summary { cursor: pointer; color: var(--text-2); }
921
+ /* versões: lista + lado a lado (reusa .thumb-screen das miniaturas) */
922
+ .versions-dialog { width: min(1100px, 94vw); }
923
+ .versions-body { display: grid; grid-template-columns: 230px 1fr; gap: 12px; max-height: 62vh; }
924
+ .versions-list { overflow: auto; display: flex; flex-direction: column; gap: 6px; }
925
+ .ver-item { text-align: left; font: inherit; color: inherit; background: var(--chrome); border: 1px solid var(--ui-line); border-radius: 8px; padding: 8px 10px; cursor: pointer; }
926
+ .ver-item.active { border-color: var(--brand); }
927
+ .ver-item small { display: block; color: var(--text-2); }
928
+ .versions-compare { overflow: auto; display: flex; flex-direction: column; gap: 10px; }
929
+ .ver-row { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; align-items: start; }
930
+ .ver-cell { border: 1px solid var(--ui-line); border-radius: 8px; overflow: hidden; }
931
+ .ver-cell.changed { border-color: var(--brand); }
932
+ .ver-cell figcaption { font-size: 12px; color: var(--text-2); padding: 4px 8px; }
933
+ .versions-count { font-size: 12px; color: var(--text-2); margin-right: auto; }
934
+ /* faixas de tema e paleta: só cartões inteiros (largura calculada no app), setas e "Ver todos" em grade */
935
+ .look-strip { display: flex; align-items: center; gap: 2px; min-width: 0; width: 100%; }
936
+ .rgroup-gallery .look-strip .theme-gallery { flex: none; overflow-x: auto; overflow-y: hidden; scrollbar-width: none; scroll-snap-type: x mandatory; padding: 2px 0; }
937
+ .look-strip .theme-gallery::-webkit-scrollbar { display: none; }
938
+ .look-strip .theme-card { scroll-snap-align: start; }
939
+ .look-ctrl { flex: none; display: flex; flex-direction: column; gap: 1px; }
940
+ .look-nav, .look-all { width: 18px; height: 20px; padding: 0; display: grid; place-items: center; border: 1px solid transparent; border-radius: 4px; background: none; color: var(--text-2); cursor: pointer; }
941
+ .look-nav:hover:not(:disabled), .look-all:hover { background: var(--hover); color: var(--text); }
942
+ .look-nav:disabled { opacity: .25; cursor: default; }
943
+ .look-nav .ic, .look-all .ic { width: 13px; height: 13px; }
944
+ .look-strip.open { width: var(--strip-w); }
945
+ .look-strip.open .look-nav { visibility: hidden; }
946
+ .look-strip.open .look-all { background: var(--selected); border-color: var(--brand); color: var(--brand); }
947
+ .rgroup-gallery .look-strip.open .theme-gallery { position: fixed; z-index: 1100; width: min(640px, calc(100vw - 16px)) !important; max-height: min(60vh, 520px); display: grid; grid-template-columns: repeat(auto-fill, 104px); justify-content: start; gap: 8px; overflow: auto; padding: 12px; scroll-snap-type: none; border: 1px solid var(--ui-line-strong); border-radius: 10px; background: var(--chrome); box-shadow: var(--shadow-2, 0 12px 32px #0004); }
948
+ /* Design em 1366 px: os seletores de texto e fontes cedem um pouco para as faixas mostrarem 3 cartões inteiros */
949
+ .ribbon-panel[data-panel="design"] #mark-style-select, .ribbon-panel[data-panel="design"] #identity-select { width: 116px; min-width: 116px; }
950
+
951
+ /* grade de variáveis no estilo do Object Inspector (Delphi): letra pequena, linhas baixas, célula = campo */
952
+ .studio-var-table { font-size: 12px; }
953
+ .studio-var-table th { padding: 3px 6px; font-size: 11px; }
954
+ .studio-var-table td { padding: 0; border-bottom: 1px solid var(--ui-line); border-right: 1px solid var(--ui-line); }
955
+ .studio-var-table td:last-child { border-right: 0; }
956
+ .studio-var-table th:first-child, .studio-var-table td:first-child { width: 42%; }
957
+ .studio-var-table th:last-child, .studio-var-table td:last-child { width: 24px; text-align: center; }
958
+ .studio-var-table input { height: 22px; padding: 0 5px; border: 1px solid transparent; border-radius: 0; font: 12px var(--font-mono); text-overflow: ellipsis; }
959
+ .studio-var-table input[data-var-value] { font: 12px var(--font-mono); }
960
+ .studio-var-table input:focus { border-color: var(--brand); background: var(--chrome); }
961
+ .studio-var-table input[readonly] { color: var(--text-2); }
962
+ .studio-var-table .studio-var-new input::placeholder { color: var(--text-3); font-style: italic; }
963
+ .studio-var-table .pg-del { width: 22px; height: 22px; padding: 0; display: grid; place-items: center; border: 0; background: none; color: var(--text-3); opacity: 0; cursor: pointer; }
964
+ .studio-var-table tr:hover .pg-del, .studio-var-table .pg-del:focus-visible { opacity: 1; }
965
+ .studio-var-table .pg-del:hover { color: var(--err); }
966
+ .studio-var-table .pg-del .ic { width: 13px; height: 13px; }
967
+ .studio-vars-panel { padding: 10px 10px 20px; }
968
+ .rbtn[hidden] { display: none !important; } /* botão da faixa que só aparece quando faz sentido (ex.: Versão clara/escura) */
969
+
970
+ /* aba Variáveis: a grade ocupa a aba inteira (sem texto de manual em cima) */
971
+ .studio-vars-panel.active { display: flex; flex-direction: column; gap: 6px; padding: 6px 6px 10px; }
972
+ .studio-env-grid { flex: 1; min-height: 0; display: flex; flex-direction: column; gap: 4px; }
973
+ .studio-env-grid .studio-var-table-wrap { flex: 1; min-height: 0; overflow: auto; }
974
+ .studio-env-head { display: flex; align-items: center; gap: 6px; padding: 0 2px; font-size: 11px; color: var(--text-2); }
975
+ .studio-env-head b { font-weight: 650; letter-spacing: .05em; color: var(--text); }
976
+ .studio-env-head span { padding: 1px 6px; border-radius: 9px; background: color-mix(in srgb, var(--brand) 18%, transparent); color: var(--brand); font-size: 10px; font-weight: 650; text-transform: uppercase; }
977
+ .studio-env-head small { color: var(--text-3); font-size: 10px; }
978
+ .studio-var-table th:nth-child(3), .studio-var-table td:nth-child(3) { width: 78px; }
979
+ .studio-var-table select[data-var-type] { width: 100%; height: 22px; padding: 0 2px; border: 1px solid transparent; background: transparent; color: var(--text-2); font-size: 11px; }
980
+ .studio-var-table select[data-var-type]:hover, .studio-var-table select[data-var-type]:focus { border-color: var(--brand); color: var(--text); }
981
+ .studio-var-table select[data-var-type] option { background: var(--chrome); color: var(--text); }
982
+ .studio-var-table tr[data-secret] td:first-child input { color: var(--brand); }
983
+ .studio-vars-status:empty { display: none; }
984
+ .studio-saved { flex: none; max-height: 34%; overflow: auto; border: 1px solid var(--ui-line); border-radius: 7px; }
985
+ .studio-saved > summary { padding: 5px 8px; font-size: 11px; font-weight: 650; color: var(--text-2); cursor: pointer; background: var(--chrome-2); }
986
+ .studio-saved .studio-var-table-wrap { border: 0; border-radius: 0; }
987
+ .studio-saved .studio-var-empty { margin: 6px 8px; }
988
+
989
+ /* gráfico de fórmulas no Formatar: "y =" + fórmula + excluir; parâmetros numa gradinha */
990
+ .sf-plot-fns { display: flex; flex-direction: column; gap: 6px; margin-bottom: 6px; }
991
+ .sf-plot-fn { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 6px; }
992
+ .sf-plot-fn .sf-error { grid-column: 2 / -1; margin: 0; }
993
+ .sf-plot-fn .sf-error:empty { display: none; }
994
+ .sf-plot-y { color: var(--text-3); font-size: 12px; }
995
+ .sf-plot-params { width: 100%; border-collapse: collapse; font-size: 11px; }
996
+ .sf-plot-params th { color: var(--text-3); font-weight: 600; text-align: left; padding: 0 3px 3px; }
997
+ .sf-plot-params tbody th { color: var(--brand); font-size: 13px; padding-right: 6px; }
998
+ .sf-plot-params td { padding: 2px; }
999
+ .sf-plot-params input { height: 26px; padding: 0 5px; font-size: 12px; min-width: 0; width: 100%; }
1000
+ .sf-plot .btn-small .ic { width: 13px; height: 13px; }
1001
+
1002
+ /* planilha do gráfico de dados: cara de planilha (células coladas, cabeçalho fixo), cola do Excel */
1003
+ .sf-sheet-wrap { max-height: 320px; overflow: auto; border: 1px solid var(--ui-line); border-radius: 6px; background: var(--chrome); }
1004
+ .sf-sheet { width: 100%; border-collapse: collapse; font-size: 12px; table-layout: fixed; }
1005
+ .sf-sheet th, .sf-sheet td { border-bottom: 1px solid var(--ui-line); border-right: 1px solid var(--ui-line); padding: 0; }
1006
+ .sf-sheet thead th { position: sticky; top: 0; z-index: 1; background: var(--chrome-2); font-weight: 600; color: var(--text-2); }
1007
+ .sf-sheet-corner { text-align: left; padding: 0 7px !important; font-size: 11px; width: 38%; }
1008
+ .sf-sheet-th { display: flex; align-items: center; }
1009
+ .sf-sheet-th .icon-btn { flex: none; width: 20px; height: 20px; }
1010
+ .sf-sheet-in { width: 100%; min-width: 0; height: 26px; padding: 0 7px; border: 0; outline: 0; background: transparent; color: var(--text); font: inherit; }
1011
+ .sf-sheet-in.num { text-align: right; font-variant-numeric: tabular-nums; }
1012
+ .sf-sheet-in:focus { box-shadow: inset 0 0 0 2px var(--brand); background: var(--selected); }
1013
+ .sf-sheet-in.invalid { box-shadow: inset 0 0 0 2px var(--danger, #c0392b); }
1014
+ .sf-sheet-name { font-weight: 600; color: var(--text-2); }
1015
+ .sf-sheet-act { width: 26px; border-right: 0 !important; text-align: center; }
1016
+ .sf-sheet-act .icon-btn { width: 22px; height: 22px; opacity: .55; }
1017
+ .sf-sheet tr:hover .sf-sheet-act .icon-btn { opacity: 1; }
1018
+ .sf-sheet-tools { display: flex; gap: 6px; margin-top: 6px; }
1019
+ .sf-sheet-tools .ic { width: 13px; height: 13px; }
1020
+
1021
+ /* foto de um item (carrossel): miniatura redonda + Escolher foto */
1022
+ .sf-photo { display: flex; align-items: center; gap: 8px; }
1023
+ .sf-photo-thumb { width: 42px; height: 42px; border-radius: 50%; object-fit: cover; border: 1px solid var(--ui-line); }
1024
+ .sf-photo-empty { font-size: 11px; color: var(--text-3); }
1025
+ .sf-photo .ic { width: 13px; height: 13px; }
1026
+
1027
+ /* ---------- projeto no estilo VS Code: Slides | Arquivos à esquerda, abas no centro ---------- */
1028
+ .rail-tabs { display: flex; gap: 2px; min-width: 0; }
1029
+ .rail-tab { display: inline-flex; align-items: center; gap: 5px; height: 26px; padding: 0 8px; border-radius: 5px; color: var(--text-3); font: inherit; font-size: 11px; text-transform: uppercase; letter-spacing: .06em; white-space: nowrap; }
1030
+ .rail-tab .ic, .rail-tab .ic svg { width: 14px; height: 14px; }
1031
+ .rail-tab:hover { color: var(--text); background: var(--hover); }
1032
+ .rail-tab.active { color: var(--brand); background: var(--selected); }
1033
+ .rail-tab:not(.active) #slide-count { display: none; }
1034
+ .rail-tab:not(.active) span:not(.muted) { display: none; }
1035
+ .explorer { flex: 1; min-height: 0; display: flex; flex-direction: column; }
1036
+ .explorer.hidden, .thumb-list.hidden { display: none; }
1037
+ .ex-tools { display: flex; gap: 2px; padding: 2px 8px 6px; border-bottom: 1px solid var(--ui-line); }
1038
+ .ex-tree { flex: 1; min-height: 0; overflow: auto; padding: 4px 0 16px; font-size: 12px; outline: none; }
1039
+ .ex-root { display: flex; align-items: center; gap: 6px; padding: 4px 10px 6px; color: var(--text-2); font-size: 11px; text-transform: uppercase; letter-spacing: .05em; }
1040
+ .ex-root b { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1041
+ .ex-root .ic, .ex-row .ic { flex: none; width: 15px; height: 15px; }
1042
+ .ex-row { display: flex; align-items: center; gap: 6px; height: 24px; padding-right: 8px; color: var(--text-2); cursor: pointer; user-select: none; white-space: nowrap; }
1043
+ .ex-row span { overflow: hidden; text-overflow: ellipsis; }
1044
+ .ex-row:hover { background: var(--hover); color: var(--text); }
1045
+ .ex-row.sel { background: var(--selected); }
1046
+ .ex-row.active { color: var(--brand); font-weight: 600; }
1047
+ .ex-row.drop { outline: 2px dashed var(--brand); outline-offset: -2px; }
1048
+ .ex-row .ex-caret { width: 12px; height: 12px; color: var(--text-3); }
1049
+ .ex-file { padding-left: calc(var(--pad, 0px) + 18px); }
1050
+ .ex-row.ex-file { margin-left: 16px; }
1051
+ .ex-protected { color: var(--text-3); }
1052
+ .ex-row[data-kind="deck"] { color: var(--text); font-weight: 600; }
1053
+ .ex-empty { padding: 14px 12px; color: var(--text-3); font-size: 12px; line-height: 1.45; }
1054
+ .ex-menu { min-width: 170px; padding: 4px; border: 1px solid var(--ui-line); border-radius: 8px; background: var(--chrome); box-shadow: var(--shadow-2); }
1055
+ .ex-menu .mi { display: block; width: 100%; text-align: left; padding: 6px 10px; border-radius: 5px; font-size: 12px; color: var(--text); }
1056
+ .ex-menu .mi:hover { background: var(--hover); }
1057
+ .editor { position: relative; }
1058
+ .doc-tabs { flex: none; display: flex; align-items: flex-end; gap: 1px; min-height: 32px; padding: 0 8px; background: var(--chrome-2); border-bottom: 1px solid var(--ui-line); overflow-x: auto; scrollbar-width: none; }
1059
+ .doc-tab { display: inline-flex; align-items: center; gap: 6px; height: 30px; max-width: 220px; padding: 0 8px 0 10px; border: 1px solid transparent; border-bottom: 0; border-radius: 6px 6px 0 0; color: var(--text-2); font-size: 12px; white-space: nowrap; }
1060
+ .doc-tab span { overflow: hidden; text-overflow: ellipsis; }
1061
+ .doc-tab .ic, .doc-tab .ic svg { width: 14px; height: 14px; flex: none; }
1062
+ .doc-tab:hover { color: var(--text); background: var(--hover); }
1063
+ .doc-tab.active { color: var(--text); background: var(--canvas-bg); border-color: var(--ui-line); margin-bottom: -1px; height: 31px; }
1064
+ .doc-tab .doc-close { opacity: .45; border-radius: 3px; }
1065
+ .doc-tab .doc-close:hover { opacity: 1; background: var(--hover); }
1066
+ .doc-dirty { width: 7px; height: 7px; border-radius: 50%; background: var(--brand); flex: none; }
1067
+ .doc-view { position: absolute; left: 0; right: 0; top: 33px; bottom: 0; z-index: 4; display: flex; flex-direction: column; min-height: 0; background: var(--chrome); }
1068
+ .doc-view.hidden { display: none; }
1069
+ .editor.doc-side .doc-view { right: 50%; border-right: 1px solid var(--ui-line); }
1070
+ .editor.doc-side .canvas-viewport { margin-left: 50%; }
1071
+ .editor.doc-side .notes-bar, .editor.doc-side .fix-panel { display: none; }
1072
+ .dv-head { flex: none; display: flex; align-items: center; gap: 8px; padding: 8px 12px; border-bottom: 1px solid var(--ui-line); font-size: 12px; }
1073
+ .dv-head .ic { width: 15px; height: 15px; }
1074
+ .dv-status { margin-left: auto; color: var(--text-3); font-size: 11px; }
1075
+ .dv-status.error { color: var(--danger, #c0392b); }
1076
+ .dv-head .btn { margin-left: 8px; }
1077
+ .dv-code { position: relative; flex: 1; min-height: 0; }
1078
+ .dv-code .dv-text { position: absolute; inset: 0; width: 100%; height: 100%; resize: none; border: 0; outline: 0; padding: 12px 14px; font: 13px/1.55 ui-monospace, Consolas, monospace; background: transparent; color: var(--text); tab-size: 2; }
1079
+ .dv-code .dv-hl { position: absolute; inset: 0; margin: 0; padding: 12px 14px; overflow: hidden; font: 13px/1.55 ui-monospace, Consolas, monospace; pointer-events: none; white-space: pre; }
1080
+ .dv-code:has(.dv-hl) .dv-text { color: transparent; caret-color: var(--text); }
1081
+ .dv-split { flex: 1; min-height: 0; display: grid; grid-template-columns: 1fr 1fr; }
1082
+ .dv-split.one { grid-template-columns: 1fr; }
1083
+ .dv-split .dv-code { border-right: 1px solid var(--ui-line); }
1084
+ .dv-md { overflow: auto; padding: 18px 26px; font-size: 14px; line-height: 1.6; color: var(--text); }
1085
+ .dv-md h1, .dv-md h2, .dv-md h3 { margin: 1em 0 .4em; line-height: 1.2; }
1086
+ .dv-md pre, .dv-md code { background: var(--chrome-2); border-radius: 5px; font: 12.5px ui-monospace, Consolas, monospace; }
1087
+ .dv-md pre { padding: 10px 12px; overflow: auto; }
1088
+ .dv-img { flex: 1; min-height: 0; display: grid; place-items: center; padding: 16px; background: var(--canvas-bg); }
1089
+ .dv-img img { max-width: 100%; max-height: 100%; object-fit: contain; box-shadow: var(--shadow-2); }
1090
+ .dv-info { margin: auto; display: flex; flex-direction: column; align-items: center; gap: 10px; color: var(--text-2); text-align: center; padding: 24px; }
1091
+ .dv-info .ic { width: 32px; height: 32px; }
1092
+ /* editor de código do explorador (viewers.js): números de linha + realce por linguagem */
1093
+ .cv-editor { flex: 1; min-height: 0; display: flex; background: var(--chrome); font: 13px/1.55 var(--font-mono); }
1094
+ .dv-split .cv-editor { border-right: 1px solid var(--ui-line); }
1095
+ .cv-gutter { flex: none; min-width: 44px; padding: 12px 8px 12px 0; overflow: hidden; text-align: right; color: var(--text-3); background: var(--chrome-2); border-right: 1px solid var(--ui-line); user-select: none; font-variant-numeric: tabular-nums; }
1096
+ .cv-area { position: relative; flex: 1; min-width: 0; }
1097
+ .cv-hl, .cv-text { position: absolute; inset: 0; margin: 0; padding: 12px 14px; font: inherit; white-space: pre; tab-size: 4; overflow: auto; border: 0; }
1098
+ .cv-hl { pointer-events: none; color: var(--text); overflow: hidden; }
1099
+ .cv-text { width: 100%; height: 100%; resize: none; outline: none; background: transparent; color: transparent; caret-color: var(--text); }
1100
+ .cv-text::selection { background: color-mix(in srgb, var(--brand) 28%, transparent); color: transparent; }
1101
+ .dv-lang { padding: 1px 7px; border-radius: 4px; background: var(--hover); color: var(--text-2); font-size: 10.5px; }
1102
+ .hl-kw { color: #0000ff; } .hl-str { color: #a31515; } .hl-num { color: #098658; } .hl-com { color: #008000; font-style: italic; }
1103
+ .hl-fn { color: #795e26; } .hl-key { color: #0451a5; } .hl-punc { color: var(--text-3); } .hl-dec { color: #af00db; }
1104
+ .hl-c0 { color: #0451a5; } .hl-c1 { color: #a31515; } .hl-c2 { color: #098658; } .hl-c3 { color: #af00db; }
1105
+ .hl-c4 { color: #b35c00; } .hl-c5 { color: #267f99; } .hl-c6 { color: #795e26; } .hl-c7 { color: #6f42c1; }
1106
+ :root[data-theme="dark"] .hl-kw { color: #569cd6; } :root[data-theme="dark"] .hl-str { color: #ce9178; } :root[data-theme="dark"] .hl-num { color: #b5cea8; }
1107
+ :root[data-theme="dark"] .hl-com { color: #6a9955; } :root[data-theme="dark"] .hl-fn { color: #dcdcaa; } :root[data-theme="dark"] .hl-key { color: #9cdcfe; } :root[data-theme="dark"] .hl-dec { color: #c586c0; }
1108
+ :root[data-theme="dark"] .hl-c0 { color: #9cdcfe; } :root[data-theme="dark"] .hl-c1 { color: #ce9178; } :root[data-theme="dark"] .hl-c2 { color: #b5cea8; } :root[data-theme="dark"] .hl-c3 { color: #c586c0; }
1109
+ :root[data-theme="dark"] .hl-c4 { color: #d7ba7d; } :root[data-theme="dark"] .hl-c5 { color: #4ec9b0; } :root[data-theme="dark"] .hl-c6 { color: #dcdcaa; } :root[data-theme="dark"] .hl-c7 { color: #b392f0; }
1110
+ /* PDF */
1111
+ .pv { flex: 1; min-height: 0; display: flex; flex-direction: column; background: var(--canvas-bg); }
1112
+ .pv-bar { flex: none; display: flex; align-items: center; gap: 4px; padding: 4px 10px; border-bottom: 1px solid var(--ui-line); background: var(--chrome); font-size: 11.5px; color: var(--text-2); }
1113
+ .pv-bar .btn { padding: 0 6px; height: 24px; }
1114
+ .pv-bar .ic, .pv-bar .ic svg { width: 14px; height: 14px; }
1115
+ .pv-grow { flex: 1; }
1116
+ .pv-zoom { min-width: 40px; text-align: center; font-variant-numeric: tabular-nums; }
1117
+ .pv-pages { flex: 1; min-height: 0; overflow: auto; display: flex; flex-direction: column; align-items: center; gap: 14px; padding: 18px 24px; }
1118
+ .pv-page { flex: none; background: #fff; box-shadow: var(--shadow-2); }
1119
+ .pv-page canvas { display: block; width: 100%; height: 100%; }
1120
+ .pv-native { flex: 1; width: 100%; border: 0; }
1121
+ /* DOCX */
1122
+ .dx { flex: 1; min-height: 0; display: flex; background: var(--canvas-bg); }
1123
+ .dx-scroll { flex: 1; overflow: auto; padding: 24px; }
1124
+ .dx-page { max-width: 820px; margin: 0 auto; padding: 56px 72px; background: #fff; color: #1f1f1f; box-shadow: var(--shadow-2); font: 15px/1.6 "Segoe UI Variable", "Segoe UI", Calibri, sans-serif; }
1125
+ .dx-page h1 { font-size: 26px; } .dx-page h2 { font-size: 21px; } .dx-page h3 { font-size: 17px; }
1126
+ .dx-page h1, .dx-page h2, .dx-page h3, .dx-page h4 { margin: 1.1em 0 .4em; line-height: 1.25; color: #1f3864; }
1127
+ .dx-page p { margin: 0 0 .6em; }
1128
+ .dx-page img { max-width: 100%; height: auto; }
1129
+ .dx-page table { border-collapse: collapse; margin: .6em 0 1em; }
1130
+ .dx-page td { border: 1px solid #bfbfbf; padding: 4px 8px; vertical-align: top; }
1131
+ .dx-page td p { margin: 0; }
1132
+ .dx-empty { color: #888; font-style: italic; }
1133
+ /* planilha como no Excel (viewers.js: sheetGrid) */
1134
+ .sh-body.no-suggest { grid-template-columns: minmax(0, 1fr) 0; }
1135
+ .sh-body.no-suggest .sh-suggest { display: none; }
1136
+ .sg-wrap { min-width: 0; min-height: 0; height: 100%; overflow: auto; outline: none; }
1137
+ .sg { border-collapse: separate; border-spacing: 0; table-layout: fixed; font-size: 12px; user-select: none; }
1138
+ .sg th, .sg td { height: 22px; padding: 0 6px; border-right: 1px solid var(--ui-line); border-bottom: 1px solid var(--ui-line); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
1139
+ .sg thead th { position: sticky; top: 0; z-index: 2; background: var(--chrome-2); color: var(--text-2); font-weight: 400; text-align: center; }
1140
+ .sg thead th .sh-type { margin: 0 0 0 6px; vertical-align: 1px; }
1141
+ .sg tbody th { position: sticky; left: 0; z-index: 1; background: var(--chrome-2); color: var(--text-2); font-weight: 400; text-align: center; }
1142
+ .sg .sg-corner { left: 0; z-index: 3; }
1143
+ .sg .sg-n-col { width: 44px; }
1144
+ .sg th.on { background: color-mix(in srgb, var(--brand) 16%, var(--chrome-2)); color: var(--brand); font-weight: 600; }
1145
+ .sg td { background: var(--chrome); color: var(--text); cursor: cell; }
1146
+ .sg td.num { text-align: right; font-variant-numeric: tabular-nums; }
1147
+ .sg tr.sg-head td { font-weight: 600; background: var(--chrome-2); }
1148
+ .sg td.sel { background: color-mix(in srgb, var(--brand) 12%, var(--chrome)); }
1149
+ .sg td.cur { outline: 2px solid var(--brand); outline-offset: -2px; background: var(--chrome); }
1150
+ .sg td:has(.sg-input) { padding: 0; }
1151
+ .sg-input { width: 100%; height: 100%; border: 0; outline: 2px solid var(--brand); outline-offset: -2px; padding: 0 5px; font: inherit; background: var(--chrome); color: var(--text); }
1152
+ /* planilha: grade à esquerda, sugestões de gráfico à direita */
1153
+ .sh-tabs { flex: none; display: flex; gap: 2px; padding: 6px 12px 0; }
1154
+ .sh-tab { padding: 4px 10px; border-radius: 5px 5px 0 0; font-size: 12px; color: var(--text-2); }
1155
+ .sh-tab.active { background: var(--selected); color: var(--brand); font-weight: 600; }
1156
+ .sh-body { flex: 1; min-height: 0; display: grid; grid-template-columns: minmax(0, 1fr) 360px; }
1157
+ .sh-grid-wrap { min-width: 0; min-height: 0; overflow: auto; border-right: 1px solid var(--ui-line); }
1158
+ .sh-grid { border-collapse: collapse; font-size: 12px; }
1159
+ .sh-grid th, .sh-grid td { border: 1px solid var(--ui-line); padding: 4px 8px; white-space: nowrap; max-width: 260px; overflow: hidden; text-overflow: ellipsis; }
1160
+ .sh-grid thead th { position: sticky; top: 0; z-index: 1; background: var(--chrome-2); text-align: left; vertical-align: top; }
1161
+ .sh-grid td.num { text-align: right; font-variant-numeric: tabular-nums; }
1162
+ .sh-n { color: var(--text-3); text-align: right; background: var(--chrome-2); position: sticky; left: 0; }
1163
+ .sh-col { font-weight: 600; color: var(--text); }
1164
+ .sh-type { display: inline-block; margin-top: 3px; padding: 1px 7px; border-radius: 99px; font-size: 10px; font-weight: 600; background: var(--hover); color: var(--text-2); }
1165
+ .sh-type.t-number, .sh-type.t-percent { background: color-mix(in srgb, #1f7ae0 18%, transparent); color: #1f7ae0; }
1166
+ .sh-type.t-date { background: color-mix(in srgb, #1b998b 20%, transparent); color: #168276; }
1167
+ .sh-type.t-category { background: color-mix(in srgb, #b7791f 20%, transparent); color: #9a6517; }
1168
+ .sh-type.by-ai { outline: 1px solid var(--brand); }
1169
+ .sh-more { padding: 8px 12px; color: var(--text-3); font-size: 11px; }
1170
+ .sh-suggest { min-height: 0; display: flex; flex-direction: column; background: var(--chrome-2); }
1171
+ .sh-suggest-head { flex: none; display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 10px 12px; border-bottom: 1px solid var(--ui-line); font-size: 12px; }
1172
+ .sh-suggest-head .btn .ic { width: 13px; height: 13px; }
1173
+ .sh-suggest-head .btn.busy { opacity: .6; }
1174
+ .sh-cards { flex: 1; min-height: 0; overflow: auto; padding: 10px; display: flex; flex-direction: column; gap: 10px; }
1175
+ .sh-card { flex: none; border: 1px solid var(--ui-line); border-radius: 8px; overflow: hidden; background: var(--chrome); }
1176
+ .sh-card.by-ai { border-color: var(--brand); }
1177
+ .sh-prev { border-radius: 0; box-shadow: none; }
1178
+ .sh-card-body { padding: 8px 10px 10px; font-size: 12px; }
1179
+ .sh-card-body b { font-size: 12.5px; }
1180
+ .sh-card-body p { margin: 4px 0 8px; color: var(--text-2); line-height: 1.4; }
1181
+ .sh-card-body .btn .ic { width: 13px; height: 13px; }
1182
+ .sh-ai { margin-left: 6px; padding: 1px 6px; border-radius: 99px; background: var(--brand); color: #fff; font-size: 9px; }
1183
+
1184
+ /* atalho flutuante do chat: lado direito, no meio da tela, quando a aba do chat não está à vista */
1185
+ .chat-fab { position: fixed; right: 0; top: 50%; transform: translateY(-50%); z-index: 60; display: grid; place-items: center; width: 34px; height: 44px; border: 1px solid var(--ui-line); border-right: 0; border-radius: 10px 0 0 10px; background: var(--chrome); color: var(--brand); box-shadow: var(--shadow-2); cursor: pointer; transition: width .2s, background .2s; }
1186
+ .chat-fab:hover { width: 42px; background: var(--selected); }
1187
+ .chat-fab .ic, .chat-fab .ic svg { width: 18px; height: 18px; }
1188
+ .chat-fab.hidden { display: none; }
1189
+ .chat-fab-dot { position: absolute; top: 7px; right: 6px; width: 8px; height: 8px; border-radius: 50%; background: var(--brand); display: none; }
1190
+ .chat-fab.has-news .chat-fab-dot { display: block; }
1191
+ /* menu de botão direito */
1192
+ .ctx-menu { position: fixed; z-index: 9999; min-width: 230px; padding: 4px; border: 1px solid var(--ui-line); border-radius: 9px; background: var(--chrome); box-shadow: var(--shadow-2); }
1193
+ .ctx-item { display: flex; align-items: center; gap: 9px; width: 100%; padding: 6px 10px; border-radius: 6px; font-size: 12.5px; color: var(--text); text-align: left; }
1194
+ .ctx-item .ic, .ctx-item .ic svg { width: 15px; height: 15px; color: var(--text-2); }
1195
+ .ctx-item:hover:not([disabled]), .ctx-item:focus-visible { background: var(--hover); outline: none; }
1196
+ .ctx-item[disabled] { opacity: .4; cursor: default; }
1197
+ .ctx-item.danger { color: var(--danger, #c0392b); }
1198
+ .ctx-item.danger .ic { color: inherit; }
1199
+ .ctx-sep { height: 1px; margin: 4px 6px; background: var(--ui-line); }
1200
+ /* Propriedades: atalho para o conteúdo do slide (que mora no Formatar) */
1201
+ .ip-content { display: flex; align-items: center; gap: 8px; width: calc(100% - 16px); margin: 8px; padding: 7px 10px; border: 1px dashed var(--ui-line-strong); border-radius: 7px; color: var(--brand); font-size: 12px; font-weight: 600; }
1202
+ .ip-content:hover { background: var(--selected); border-style: solid; }
1203
+ .ip-content .ic { width: 14px; height: 14px; }
1204
+
1205
+ /* árvore: ações ao passar o mouse, nome editável no lugar */
1206
+ .ex-row { position: relative; }
1207
+ .ex-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
1208
+ .ex-acts { display: none; gap: 2px; margin-left: auto; }
1209
+ .ex-row:hover .ex-acts, .ex-row.sel .ex-acts { display: inline-flex; }
1210
+ .ex-acts .ic { width: 20px; height: 20px; padding: 3px; border-radius: 4px; color: var(--text-3); cursor: pointer; }
1211
+ .ex-acts .ic:hover { background: var(--hover); color: var(--text); }
1212
+ .ex-acts [data-act="delete"]:hover { color: var(--danger, #c0392b); }
1213
+ .ex-edit { flex: 1; min-width: 0; height: 20px; padding: 0 5px; border: 1px solid var(--brand); border-radius: 3px; background: var(--chrome); color: var(--text); font: inherit; outline: none; }
1214
+ .ex-tree:focus-visible .ex-row.sel { outline: 1px solid var(--brand); outline-offset: -1px; }
1215
+ .ctx-key { margin-left: auto; color: var(--text-3); font-size: 11px; }
1216
+
1217
+ /* revisão: o que mudou em relação ao original (review:), para aceitar ou desfazer */
1218
+ .thumb-review { position: absolute; left: 26px; top: 8px; z-index: 2; display: inline-flex; align-items: center; gap: 3px; height: 17px; padding: 0 6px; border-radius: 9px; font-size: 10.5px; font-weight: 600; color: #fff; box-shadow: var(--shadow-1); }
1219
+ .thumb-review .ic, .thumb-review .ic svg { width: 11px; height: 11px; }
1220
+ .thumb-review.rv-new { background: #107c10; }
1221
+ .thumb-review.rv-changed { background: #bc4b09; }
1222
+ .thumb-review.rv-pending { background: #8764b8; }
1223
+ .thumb-review.rv-check { background: #0063b1; }
1224
+ .review-bar { position: absolute; left: 12px; right: 12px; top: 40px; z-index: 6; display: flex; align-items: center; gap: 8px; min-height: 34px; padding: 4px 6px 4px 12px; border-radius: 8px; background: var(--chrome); border: 1px solid var(--ui-line); border-left: 4px solid #bc4b09; box-shadow: var(--shadow-2); font-size: 12px; }
1225
+ .review-bar.rv-new { border-left-color: #107c10; }
1226
+ .review-bar.rv-pending { border-left-color: #8764b8; }
1227
+ .review-bar.rv-check { border-left-color: #0063b1; }
1228
+ .review-bar.hidden { display: none; }
1229
+ .review-bar .ic, .review-bar .ic svg { width: 15px; height: 15px; }
1230
+ .review-bar .rb-note { flex: 1; min-width: 0; color: var(--text-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1231
+ .review-bar .btn.active { background: var(--selected); color: var(--brand); }
1232
+ .review-original { position: absolute; inset: 0; z-index: 5; background: #fff; }
1233
+ .review-original.hidden { display: none; }
1234
+ .review-original img { width: 100%; height: 100%; object-fit: contain; display: block; }
1235
+ .review-original .ro-tag { position: absolute; left: 12px; top: 12px; padding: 2px 10px; border-radius: 6px; background: #bc4b09; color: #fff; font: 600 13px var(--font-sans); }
1236
+ .review-dialog { width: min(760px, 92vw); max-height: 80vh; padding: 0; border: 1px solid var(--ui-line); border-radius: 10px; background: var(--chrome); color: var(--text); box-shadow: var(--shadow-3); }
1237
+ .review-dialog::backdrop { background: rgba(0, 0, 0, .25); }
1238
+ .review-dialog header { display: flex; align-items: center; gap: 8px; padding: 10px 12px; border-bottom: 1px solid var(--ui-line); font-size: 13px; }
1239
+ .review-dialog .grow { flex: 1; }
1240
+ .review-dialog .rv-count { padding: 0 7px; border-radius: 9px; background: var(--hover); font-size: 11px; }
1241
+ .rv-list { max-height: calc(80vh - 52px); overflow: auto; padding: 6px; }
1242
+ .rv-item { display: flex; align-items: center; gap: 8px; padding: 6px 8px; border-radius: 6px; font-size: 12px; }
1243
+ .rv-item:hover { background: var(--hover); }
1244
+ .rv-item .thumb-review { position: static; box-shadow: none; }
1245
+ .rv-num { width: 26px; text-align: right; color: var(--text-3); font-variant-numeric: tabular-nums; }
1246
+ .rv-text { flex: 1; min-width: 0; display: flex; flex-direction: column; }
1247
+ .rv-title { font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1248
+ .rv-note { color: var(--text-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1249
+ .rv-empty { padding: 24px; text-align: center; color: var(--text-2); }
1250
+
1251
+ /* Arquivo › Compartilhar link (share-ui.js) */
1252
+ .share-dialog { width: min(620px, 94vw); }
1253
+ .share-new { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 18px; margin-bottom: 14px; }
1254
+ .share-who { display: flex; flex-direction: column; gap: 6px; flex: 1 1 260px; }
1255
+ .share-who[hidden] { display: none; }
1256
+ .share-who label, .share-notes { display: flex; align-items: center; gap: 8px; cursor: pointer; color: var(--text); font-size: 14px; }
1257
+ .share-who .ic { width: 16px; height: 16px; color: var(--text-2); }
1258
+ .share-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
1259
+ .share-item { display: flex; align-items: center; gap: 6px; }
1260
+ .share-item .share-url { flex: 1; min-width: 0; font-size: 13px; }
1261
+ .share-kind .ic { width: 18px; height: 18px; color: var(--text-2); }
1262
+ .share-copy.done { color: var(--accent); }