primocode 11.0.0 → 11.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 (3879) hide show
  1. package/README.md +18 -4
  2. package/agentes/algoritmos.md +10 -0
  3. package/agentes/angular.md +10 -0
  4. package/agentes/animacao-web.md +10 -0
  5. package/agentes/anuncios.md +10 -0
  6. package/agentes/apresentacao.md +10 -0
  7. package/agentes/arquitetura.md +10 -0
  8. package/agentes/audio.md +10 -0
  9. package/agentes/auth.md +10 -0
  10. package/agentes/automacao.md +10 -0
  11. package/agentes/bash.md +10 -0
  12. package/agentes/blockchain.md +10 -0
  13. package/agentes/brand.md +10 -0
  14. package/agentes/canvas.md +10 -0
  15. package/agentes/ci-cd.md +10 -0
  16. package/agentes/cloud.md +10 -0
  17. package/agentes/cores.md +10 -0
  18. package/agentes/cpp.md +10 -0
  19. package/agentes/csharp.md +10 -0
  20. package/agentes/css-layout.md +1 -1
  21. package/agentes/dados-sql-analise.md +10 -0
  22. package/agentes/depuracao.md +1 -1
  23. package/agentes/design-system.md +10 -0
  24. package/agentes/docker.md +10 -0
  25. package/agentes/electron.md +10 -0
  26. package/agentes/email-mkt.md +10 -0
  27. package/agentes/extensao-chrome.md +10 -0
  28. package/agentes/filas.md +10 -0
  29. package/agentes/firebase.md +10 -0
  30. package/agentes/flutter.md +10 -0
  31. package/agentes/games.md +10 -0
  32. package/agentes/geral/capacidades/backend.json +246 -0
  33. package/agentes/geral/capacidades/banco.json +186 -0
  34. package/agentes/geral/capacidades/codigo.json +576 -0
  35. package/agentes/geral/capacidades/depuracao.json +570 -0
  36. package/agentes/geral/capacidades/design.json +246 -0
  37. package/agentes/geral/capacidades/devops.json +240 -0
  38. package/agentes/geral/capacidades/frontend.json +252 -0
  39. package/agentes/geral/capacidades/git.json +558 -0
  40. package/agentes/geral/capacidades/ia-llm.json +246 -0
  41. package/agentes/geral/capacidades/marketing.json +252 -0
  42. package/agentes/geral/capacidades/mobile.json +192 -0
  43. package/agentes/geral/capacidades/produto-negocio.json +186 -0
  44. package/agentes/geral/capacidades/shell.json +522 -0
  45. package/agentes/geral/capacidades/testes.json +186 -0
  46. package/agentes/geral/capacidades/video-motion.json +246 -0
  47. package/agentes/geral/capacidades/windows-linux.json +216 -0
  48. package/agentes/go.md +10 -0
  49. package/agentes/graphql.md +10 -0
  50. package/agentes/growth.md +10 -0
  51. package/agentes/ia-evals.md +10 -0
  52. package/agentes/ilustracao.md +10 -0
  53. package/agentes/indice.md +1 -86
  54. package/agentes/iot.md +10 -0
  55. package/agentes/java.md +10 -0
  56. package/agentes/javascript.md +10 -0
  57. package/agentes/juridico-basico.md +10 -0
  58. package/agentes/kotlin.md +10 -0
  59. package/agentes/kubernetes.md +10 -0
  60. package/agentes/landing.md +10 -0
  61. package/agentes/legado.md +10 -0
  62. package/agentes/linux.md +10 -0
  63. package/agentes/llm-prompts.md +10 -0
  64. package/agentes/mcp.md +10 -0
  65. package/agentes/ml.md +10 -0
  66. package/agentes/mongodb.md +10 -0
  67. package/agentes/motion.md +10 -0
  68. package/agentes/negocio.md +10 -0
  69. package/agentes/observabilidade.md +10 -0
  70. package/agentes/orm.md +10 -0
  71. package/agentes/pagamentos.md +10 -0
  72. package/agentes/pentest.md +10 -0
  73. package/agentes/performance.md +1 -1
  74. package/agentes/pesquisa-usuario.md +10 -0
  75. package/agentes/php.md +10 -0
  76. package/agentes/planilhas.md +10 -0
  77. package/agentes/privacidade.md +10 -0
  78. package/agentes/produto.md +10 -0
  79. package/agentes/pwa.md +10 -0
  80. package/agentes/qa-manual.md +10 -0
  81. package/agentes/raspagem.md +10 -0
  82. package/agentes/react-native.md +10 -0
  83. package/agentes/rede.md +10 -0
  84. package/agentes/redis.md +10 -0
  85. package/agentes/regex.md +10 -0
  86. package/agentes/revisao-texto.md +10 -0
  87. package/agentes/ruby.md +10 -0
  88. package/agentes/rust.md +10 -0
  89. package/agentes/seo.md +10 -0
  90. package/agentes/social.md +10 -0
  91. package/agentes/svelte.md +10 -0
  92. package/agentes/swift.md +10 -0
  93. package/agentes/tailwind.md +10 -0
  94. package/agentes/testes-carga.md +10 -0
  95. package/agentes/testes-e2e.md +10 -0
  96. package/agentes/testes-unit.md +10 -0
  97. package/agentes/thumbnails.md +10 -0
  98. package/agentes/tipografia.md +10 -0
  99. package/agentes/traducao.md +10 -0
  100. package/agentes/ui-mobile.md +10 -0
  101. package/agentes/video-edicao.md +10 -0
  102. package/agentes/video-roteiro.md +10 -0
  103. package/agentes/visualizacao.md +10 -0
  104. package/agentes/vue.md +10 -0
  105. package/agentes/web3d.md +10 -0
  106. package/agentes/websocket.md +10 -0
  107. package/bin/primocode-rpc.js +100 -0
  108. package/bin/primocode.js +3 -4209
  109. package/editor/modelo-projeto/build.py +12 -4
  110. package/kits/KITS.md +4 -0
  111. package/lib/agentes/index.js +47 -4
  112. package/lib/agentes/nucleo.js +1 -1
  113. package/lib/agentes-pessoais.js +117 -0
  114. package/lib/agents-md.js +1 -1
  115. package/lib/app-chat.js +1 -1
  116. package/lib/app-server/cli.js +61 -0
  117. package/lib/app-server/index.js +3 -0
  118. package/lib/app-server/pareamento.js +61 -0
  119. package/lib/app-server/protocolo.js +86 -0
  120. package/lib/app-server/servidor.js +685 -0
  121. package/lib/app-server/websocket.js +87 -0
  122. package/lib/avisos.js +64 -0
  123. package/lib/backup-banco.js +1 -1
  124. package/lib/browser.js +7 -3
  125. package/lib/cli/boas-vindas.js +153 -0
  126. package/lib/cli/comando-api.js +85 -0
  127. package/lib/cli/comandos-extra.js +553 -0
  128. package/lib/cli/comandos.js +104 -0
  129. package/lib/cli/headless.js +102 -0
  130. package/lib/cli/sessao.js +4179 -0
  131. package/lib/cli/statusline.js +52 -0
  132. package/lib/cli/util.js +2 -2
  133. package/lib/cli-nova.js +237 -0
  134. package/lib/conferir.js +4 -4
  135. package/lib/config/config.js +419 -0
  136. package/lib/config/limites.js +100 -0
  137. package/lib/cursor.js +3 -3
  138. package/lib/diff.js +1 -1
  139. package/lib/effort.js +1 -1
  140. package/lib/entrega.js +1 -1
  141. package/lib/escopo.js +1 -1
  142. package/lib/explicar.js +1 -1
  143. package/lib/fala.js +2 -2
  144. package/lib/guardar.js +2 -2
  145. package/lib/mcp/mcp.js +819 -0
  146. package/lib/memoria-usuario.js +1 -1
  147. package/lib/motor/aprovacao.js +114 -0
  148. package/lib/motor/eventos.js +77 -0
  149. package/lib/motor/index.js +8 -0
  150. package/lib/motor/tela-terminal.js +64 -0
  151. package/lib/motor/turno.js +43 -0
  152. package/lib/motor/voz.js +65 -0
  153. package/lib/mudou.js +1 -1
  154. package/lib/nome-projeto.js +1 -1
  155. package/lib/nuvem.js +2 -2
  156. package/lib/permission/perigo.js +401 -0
  157. package/lib/permission/permissao.js +137 -0
  158. package/lib/permission/sandbox.js +252 -0
  159. package/lib/piloto.js +39 -0
  160. package/lib/placar.js +1 -1
  161. package/lib/plano-previo.js +1 -1
  162. package/lib/plugin/auto-preview.js +71 -0
  163. package/lib/plugin/autoteste.js +1 -0
  164. package/lib/plugin/desktop.js +756 -0
  165. package/lib/plugin/editor-pro-maquina.js +355 -0
  166. package/lib/plugin/editor-pro.js +1022 -0
  167. package/lib/plugin/entregaveis/carrossel.js +93 -0
  168. package/lib/plugin/entregaveis/cartaz.js +112 -0
  169. package/lib/plugin/entregaveis/cli.js +36 -0
  170. package/lib/plugin/entregaveis/documento.js +169 -0
  171. package/lib/plugin/entregaveis/especialistas.js +72 -0
  172. package/lib/plugin/entregaveis/nucleo.js +243 -0
  173. package/lib/plugin/entregaveis/slides.js +232 -0
  174. package/lib/plugin/estudio/acervo.js +418 -0
  175. package/lib/plugin/estudio/assets.js +497 -0
  176. package/lib/plugin/estudio/assinatura.js +108 -0
  177. package/lib/plugin/estudio/conferencia-visual.js +76 -0
  178. package/lib/plugin/estudio/conferir-quadros.js +56 -0
  179. package/lib/plugin/estudio/cota.js +157 -0
  180. package/lib/plugin/estudio/criar.js +113 -0
  181. package/lib/plugin/estudio/diretor.js +392 -0
  182. package/lib/plugin/estudio/editor.js +290 -0
  183. package/lib/plugin/estudio/gosto-descrever.js +87 -0
  184. package/lib/plugin/estudio/gosto.js +608 -0
  185. package/lib/plugin/estudio/historico.js +60 -0
  186. package/lib/plugin/estudio/identidade.js +560 -0
  187. package/lib/plugin/estudio/index.js +2725 -0
  188. package/lib/plugin/estudio/kit.js +91 -0
  189. package/lib/plugin/estudio/kits-tela.js +199 -0
  190. package/lib/plugin/estudio/kokoro.js +127 -0
  191. package/lib/plugin/estudio/maquina-foto.js +177 -0
  192. package/lib/plugin/estudio/maquina-trilha.js +199 -0
  193. package/lib/plugin/estudio/maquina-voz.js +429 -0
  194. package/lib/plugin/estudio/marca.js +398 -0
  195. package/lib/plugin/estudio/materiais.js +218 -0
  196. package/lib/plugin/estudio/miniatura.js +56 -0
  197. package/lib/plugin/estudio/morfar.js +191 -0
  198. package/lib/plugin/estudio/print-site.js +341 -0
  199. package/lib/plugin/estudio/projeto.js +340 -0
  200. package/lib/plugin/estudio/projetos.js +72 -0
  201. package/lib/plugin/kits-parecidos.js +99 -0
  202. package/lib/plugin/kits.js +585 -0
  203. package/lib/plugin/marca-kit.js +312 -0
  204. package/lib/plugin/motioncraft.js +67 -0
  205. package/lib/plugin/pesquisar.js +7 -4
  206. package/lib/plugin/video/analise.js +89 -0
  207. package/lib/plugin/video/auto.js +344 -0
  208. package/lib/plugin/video/catalogo.js +20 -0
  209. package/lib/plugin/video/mutar.js +28 -0
  210. package/lib/plugin/video/ops-fx.js +453 -0
  211. package/lib/plugin/video/ops.js +373 -0
  212. package/lib/plugin/video/pedido.js +191 -0
  213. package/lib/plugin/video/projeto.js +133 -0
  214. package/lib/plugin/video/rastrear.js +95 -0
  215. package/lib/plugin/video/render.js +274 -0
  216. package/lib/plugin/video/transcript.js +124 -0
  217. package/lib/plugin/video/zoom.js +275 -0
  218. package/lib/plugin/voz-ponte.js +15 -0
  219. package/lib/plugin/voz.js +532 -0
  220. package/lib/porta.js +4 -4
  221. package/lib/pre-leitura.js +2 -2
  222. package/lib/preparar.js +11 -11
  223. package/lib/projetos-meta.js +90 -0
  224. package/lib/provider/api.js +310 -0
  225. package/lib/provider/claude-engine.js +673 -0
  226. package/lib/provider/codex-engine.js +225 -0
  227. package/lib/provider/local/motor-cli.js +93 -0
  228. package/lib/provider/local/motor.js +267 -0
  229. package/lib/provider/local/provedor.js +169 -0
  230. package/lib/publicar.js +2 -2
  231. package/lib/qr.js +209 -0
  232. package/lib/registro.js +2 -2
  233. package/lib/repeticao.js +2 -2
  234. package/lib/segredos.js +2 -2
  235. package/lib/session/checkpoint-git.js +221 -0
  236. package/lib/session/checkpoint.js +366 -0
  237. package/lib/session/compactacao.js +1 -1
  238. package/lib/session/exportar-conversa.js +49 -0
  239. package/lib/session/linha-do-tempo.js +130 -0
  240. package/lib/session/runner/act.js +2562 -0
  241. package/lib/skill/catalogo.js +369 -0
  242. package/lib/skill/marketplace.js +189 -0
  243. package/lib/skill/skills.js +468 -0
  244. package/lib/team.js +4 -4
  245. package/lib/tool/diagnostico.js +14 -3
  246. package/lib/tool/lsp.js +211 -0
  247. package/lib/tool/perguntar.js +55 -1
  248. package/lib/tool/tools.js +1101 -0
  249. package/lib/trava.js +1 -1
  250. package/lib/travado.js +1 -1
  251. package/lib/tui/entrada.js +1031 -0
  252. package/lib/tui/tela.js +245 -0
  253. package/lib/tui/ui.js +763 -0
  254. package/materiais/adesivos/base.ts +101 -0
  255. package/materiais/adesivos/camera/CameraDeriva.tsx +37 -0
  256. package/materiais/adesivos/cores/paleta.json +30 -0
  257. package/materiais/adesivos/cores/paleta.png +0 -0
  258. package/materiais/adesivos/formas/AdesivoForma.tsx +42 -0
  259. package/materiais/adesivos/formas/AdesivoFoto.tsx +36 -0
  260. package/materiais/adesivos/formas/SeloPreco.tsx +38 -0
  261. package/materiais/adesivos/pecas.json +496 -0
  262. package/materiais/adesivos/referencia/analise.md +85 -0
  263. package/materiais/adesivos/referencia/quadro-1.png +0 -0
  264. package/materiais/adesivos/referencia/quadro-2.png +0 -0
  265. package/materiais/adesivos/referencia/quadro-3.png +0 -0
  266. package/materiais/adesivos/referencia/quadro-4.png +0 -0
  267. package/materiais/adesivos/referencia/referencia.mp4 +0 -0
  268. package/materiais/adesivos/regras.md +138 -0
  269. package/materiais/adesivos/sons/Som.tsx +33 -0
  270. package/materiais/adesivos/texturas/ChuvaDeAdesivos.tsx +29 -0
  271. package/materiais/adesivos/texturas/Fundo.tsx +21 -0
  272. package/materiais/adesivos/texturas/Particulas.tsx +22 -0
  273. package/materiais/adesivos/tipografia/AdesivoTexto.tsx +35 -0
  274. package/materiais/adesivos/tipografia/AssinaturaMarca.tsx +36 -0
  275. package/materiais/adesivos/tipografia/TituloEtiquetas.tsx +33 -0
  276. package/materiais/adesivos/transicoes/Cena.tsx +48 -0
  277. package/materiais/adesivos/transicoes/CorteImpacto.tsx +16 -0
  278. package/materiais/antes-depois/base.ts +82 -0
  279. package/materiais/antes-depois/camera/CameraDeriva.tsx +37 -0
  280. package/materiais/antes-depois/cores/paleta.json +28 -0
  281. package/materiais/antes-depois/cores/paleta.png +0 -0
  282. package/materiais/antes-depois/formas/BarraMedidor.tsx +43 -0
  283. package/materiais/antes-depois/formas/FaixaMarquee.tsx +35 -0
  284. package/materiais/antes-depois/formas/ListaMudancas.tsx +37 -0
  285. package/materiais/antes-depois/formas/RotuloAntesDepois.tsx +26 -0
  286. package/materiais/antes-depois/formas/TelaDividida.tsx +68 -0
  287. package/materiais/antes-depois/pecas.json +520 -0
  288. package/materiais/antes-depois/referencia/analise.md +85 -0
  289. package/materiais/antes-depois/referencia/quadro-1.png +0 -0
  290. package/materiais/antes-depois/referencia/quadro-2.png +0 -0
  291. package/materiais/antes-depois/referencia/quadro-3.png +0 -0
  292. package/materiais/antes-depois/referencia/quadro-4.png +0 -0
  293. package/materiais/antes-depois/referencia/referencia.mp4 +0 -0
  294. package/materiais/antes-depois/regras.md +141 -0
  295. package/materiais/antes-depois/sons/Som.tsx +40 -0
  296. package/materiais/antes-depois/texturas/Fundo.tsx +24 -0
  297. package/materiais/antes-depois/texturas/Particulas.tsx +22 -0
  298. package/materiais/antes-depois/tipografia/NumeroDelta.tsx +36 -0
  299. package/materiais/antes-depois/transicoes/Cena.tsx +41 -0
  300. package/materiais/antes-depois/transicoes/CorteImpacto.tsx +16 -0
  301. package/materiais/apple-tipografico/base.ts +111 -0
  302. package/materiais/apple-tipografico/camera/Camera.tsx +23 -0
  303. package/materiais/apple-tipografico/camera/CameraDeriva.tsx +37 -0
  304. package/materiais/apple-tipografico/cores/paleta.json +21 -0
  305. package/materiais/apple-tipografico/cores/paleta.png +0 -0
  306. package/materiais/apple-tipografico/formas/CartaoRadial.tsx +41 -0
  307. package/materiais/apple-tipografico/formas/Produto3D.tsx +126 -0
  308. package/materiais/apple-tipografico/formas/ProdutoFoto.tsx +47 -0
  309. package/materiais/apple-tipografico/lib/produto3d-apoio.ts +22 -0
  310. package/materiais/apple-tipografico/pecas.json +491 -0
  311. package/materiais/apple-tipografico/referencia/analise.md +87 -0
  312. package/materiais/apple-tipografico/referencia/quadro-1.png +0 -0
  313. package/materiais/apple-tipografico/referencia/quadro-2.png +0 -0
  314. package/materiais/apple-tipografico/referencia/quadro-3.png +0 -0
  315. package/materiais/apple-tipografico/referencia/quadro-4.png +0 -0
  316. package/materiais/apple-tipografico/referencia/referencia.mp4 +0 -0
  317. package/materiais/apple-tipografico/regras.md +171 -0
  318. package/materiais/apple-tipografico/sons/Som.tsx +40 -0
  319. package/materiais/apple-tipografico/texturas/Fundo.tsx +21 -0
  320. package/materiais/apple-tipografico/texturas/Particulas.tsx +22 -0
  321. package/materiais/apple-tipografico/tipografia/AssinaturaPreta.tsx +33 -0
  322. package/materiais/apple-tipografico/tipografia/LegendaCurta.tsx +51 -0
  323. package/materiais/apple-tipografico/transicoes/Cena.tsx +55 -0
  324. package/materiais/apple-tipografico/transicoes/CorteImpacto.tsx +16 -0
  325. package/materiais/aquarela/base.ts +97 -0
  326. package/materiais/aquarela/camera/CameraDeriva.tsx +37 -0
  327. package/materiais/aquarela/cores/paleta.json +30 -0
  328. package/materiais/aquarela/cores/paleta.png +0 -0
  329. package/materiais/aquarela/formas/AnotacaoManual.tsx +40 -0
  330. package/materiais/aquarela/formas/ManchaTinta.tsx +46 -0
  331. package/materiais/aquarela/formas/Pincelada.tsx +43 -0
  332. package/materiais/aquarela/formas/Pingos.tsx +31 -0
  333. package/materiais/aquarela/pecas.json +498 -0
  334. package/materiais/aquarela/referencia/analise.md +87 -0
  335. package/materiais/aquarela/referencia/quadro-1.png +0 -0
  336. package/materiais/aquarela/referencia/quadro-2.png +0 -0
  337. package/materiais/aquarela/referencia/quadro-3.png +0 -0
  338. package/materiais/aquarela/referencia/quadro-4.png +0 -0
  339. package/materiais/aquarela/referencia/referencia.mp4 +0 -0
  340. package/materiais/aquarela/regras.md +141 -0
  341. package/materiais/aquarela/sons/Som.tsx +33 -0
  342. package/materiais/aquarela/texturas/Fundo.tsx +24 -0
  343. package/materiais/aquarela/texturas/PapelRasgado.tsx +50 -0
  344. package/materiais/aquarela/texturas/Particulas.tsx +22 -0
  345. package/materiais/aquarela/tipografia/AssinaturaMarca.tsx +33 -0
  346. package/materiais/aquarela/tipografia/TituloPincel.tsx +51 -0
  347. package/materiais/aquarela/transicoes/Cena.tsx +48 -0
  348. package/materiais/aquarela/transicoes/CorteImpacto.tsx +16 -0
  349. package/materiais/aurora/base.ts +93 -0
  350. package/materiais/aurora/camera/CameraDeriva.tsx +37 -0
  351. package/materiais/aurora/cores/paleta.json +30 -0
  352. package/materiais/aurora/cores/paleta.png +0 -0
  353. package/materiais/aurora/formas/CartaoVidro.tsx +29 -0
  354. package/materiais/aurora/formas/CeuEstrelado.tsx +22 -0
  355. package/materiais/aurora/formas/Montanhas.tsx +24 -0
  356. package/materiais/aurora/pecas.json +485 -0
  357. package/materiais/aurora/referencia/analise.md +84 -0
  358. package/materiais/aurora/referencia/quadro-1.png +0 -0
  359. package/materiais/aurora/referencia/quadro-2.png +0 -0
  360. package/materiais/aurora/referencia/quadro-3.png +0 -0
  361. package/materiais/aurora/referencia/quadro-4.png +0 -0
  362. package/materiais/aurora/referencia/referencia.mp4 +0 -0
  363. package/materiais/aurora/regras.md +140 -0
  364. package/materiais/aurora/sons/Som.tsx +33 -0
  365. package/materiais/aurora/texturas/Fundo.tsx +35 -0
  366. package/materiais/aurora/texturas/Particulas.tsx +22 -0
  367. package/materiais/aurora/tipografia/AssinaturaMarca.tsx +24 -0
  368. package/materiais/aurora/tipografia/Legenda.tsx +23 -0
  369. package/materiais/aurora/tipografia/TituloSerif.tsx +36 -0
  370. package/materiais/aurora/transicoes/Cena.tsx +48 -0
  371. package/materiais/aurora/transicoes/CorteImpacto.tsx +16 -0
  372. package/materiais/aurora/transicoes/CortinaDeLuz.tsx +36 -0
  373. package/materiais/bauhaus/base.ts +74 -0
  374. package/materiais/bauhaus/camera/Camera.tsx +21 -0
  375. package/materiais/bauhaus/camera/CameraDeriva.tsx +37 -0
  376. package/materiais/bauhaus/cores/paleta.json +27 -0
  377. package/materiais/bauhaus/cores/paleta.png +0 -0
  378. package/materiais/bauhaus/formas/BarraDiagonal.tsx +20 -0
  379. package/materiais/bauhaus/formas/ComposicaoGeometrica.tsx +54 -0
  380. package/materiais/bauhaus/formas/ListaFaixas.tsx +27 -0
  381. package/materiais/bauhaus/formas/Overlay.tsx +18 -0
  382. package/materiais/bauhaus/pecas.json +520 -0
  383. package/materiais/bauhaus/referencia/analise.md +81 -0
  384. package/materiais/bauhaus/referencia/quadro-1.png +0 -0
  385. package/materiais/bauhaus/referencia/quadro-2.png +0 -0
  386. package/materiais/bauhaus/referencia/quadro-3.png +0 -0
  387. package/materiais/bauhaus/referencia/quadro-4.png +0 -0
  388. package/materiais/bauhaus/referencia/referencia.mp4 +0 -0
  389. package/materiais/bauhaus/regras.md +127 -0
  390. package/materiais/bauhaus/sons/Som.tsx +30 -0
  391. package/materiais/bauhaus/texturas/Fundo.tsx +13 -0
  392. package/materiais/bauhaus/texturas/Particulas.tsx +22 -0
  393. package/materiais/bauhaus/tipografia/AssinaturaMarca.tsx +26 -0
  394. package/materiais/bauhaus/tipografia/NumeroBauhaus.tsx +21 -0
  395. package/materiais/bauhaus/tipografia/TituloBauhaus.tsx +32 -0
  396. package/materiais/bauhaus/transicoes/Cena.tsx +36 -0
  397. package/materiais/bauhaus/transicoes/CorteImpacto.tsx +16 -0
  398. package/materiais/brutalista/base.ts +71 -0
  399. package/materiais/brutalista/camera/CameraDeriva.tsx +37 -0
  400. package/materiais/brutalista/cores/paleta.json +25 -0
  401. package/materiais/brutalista/cores/paleta.png +0 -0
  402. package/materiais/brutalista/formas/BlocoSombra.tsx +18 -0
  403. package/materiais/brutalista/formas/CartaoFotoBruto.tsx +19 -0
  404. package/materiais/brutalista/formas/FitaAlerta.tsx +20 -0
  405. package/materiais/brutalista/formas/ListaBruta.tsx +23 -0
  406. package/materiais/brutalista/formas/MonoEnorme.tsx +43 -0
  407. package/materiais/brutalista/formas/QuadroCor.tsx +14 -0
  408. package/materiais/brutalista/formas/Terminal.tsx +25 -0
  409. package/materiais/brutalista/pecas.json +559 -0
  410. package/materiais/brutalista/referencia/analise.md +81 -0
  411. package/materiais/brutalista/referencia/quadro-1.png +0 -0
  412. package/materiais/brutalista/referencia/quadro-2.png +0 -0
  413. package/materiais/brutalista/referencia/quadro-3.png +0 -0
  414. package/materiais/brutalista/referencia/quadro-4.png +0 -0
  415. package/materiais/brutalista/referencia/referencia.mp4 +0 -0
  416. package/materiais/brutalista/regras.md +128 -0
  417. package/materiais/brutalista/sons/Som.tsx +38 -0
  418. package/materiais/brutalista/texturas/Fundo.tsx +9 -0
  419. package/materiais/brutalista/texturas/Particulas.tsx +22 -0
  420. package/materiais/brutalista/tipografia/AssinaturaMarca.tsx +21 -0
  421. package/materiais/brutalista/tipografia/ContadorGrande.tsx +21 -0
  422. package/materiais/brutalista/transicoes/Cena.tsx +41 -0
  423. package/materiais/brutalista/transicoes/CorteImpacto.tsx +16 -0
  424. package/materiais/campos-de-cor/base.ts +87 -0
  425. package/materiais/campos-de-cor/camera/Camera.tsx +23 -0
  426. package/materiais/campos-de-cor/camera/CameraDeriva.tsx +37 -0
  427. package/materiais/campos-de-cor/cores/paleta.json +25 -0
  428. package/materiais/campos-de-cor/cores/paleta.png +0 -0
  429. package/materiais/campos-de-cor/formas/Asterisco.tsx +26 -0
  430. package/materiais/campos-de-cor/formas/CampoDeCor.tsx +39 -0
  431. package/materiais/campos-de-cor/formas/FormaGeometrica.tsx +37 -0
  432. package/materiais/campos-de-cor/formas/ListaRegua.tsx +30 -0
  433. package/materiais/campos-de-cor/pecas.json +534 -0
  434. package/materiais/campos-de-cor/referencia/analise.md +81 -0
  435. package/materiais/campos-de-cor/referencia/quadro-1.png +0 -0
  436. package/materiais/campos-de-cor/referencia/quadro-2.png +0 -0
  437. package/materiais/campos-de-cor/referencia/quadro-3.png +0 -0
  438. package/materiais/campos-de-cor/referencia/quadro-4.png +0 -0
  439. package/materiais/campos-de-cor/referencia/referencia.mp4 +0 -0
  440. package/materiais/campos-de-cor/regras.md +125 -0
  441. package/materiais/campos-de-cor/sons/Som.tsx +39 -0
  442. package/materiais/campos-de-cor/texturas/Fundo.tsx +11 -0
  443. package/materiais/campos-de-cor/texturas/Particulas.tsx +22 -0
  444. package/materiais/campos-de-cor/tipografia/AssinaturaMarca.tsx +18 -0
  445. package/materiais/campos-de-cor/tipografia/FitaDeTexto.tsx +24 -0
  446. package/materiais/campos-de-cor/tipografia/LegendaItalica.tsx +12 -0
  447. package/materiais/campos-de-cor/tipografia/PalavraGigante.tsx +44 -0
  448. package/materiais/campos-de-cor/transicoes/Cena.tsx +46 -0
  449. package/materiais/campos-de-cor/transicoes/CorteImpacto.tsx +16 -0
  450. package/materiais/cartaz-cinetico/base.ts +72 -0
  451. package/materiais/cartaz-cinetico/camera/CameraDeriva.tsx +37 -0
  452. package/materiais/cartaz-cinetico/cores/paleta.json +26 -0
  453. package/materiais/cartaz-cinetico/cores/paleta.png +0 -0
  454. package/materiais/cartaz-cinetico/formas/CirculoPoster.tsx +22 -0
  455. package/materiais/cartaz-cinetico/formas/PilhaCartaz.tsx +40 -0
  456. package/materiais/cartaz-cinetico/formas/Selo.tsx +25 -0
  457. package/materiais/cartaz-cinetico/pecas.json +524 -0
  458. package/materiais/cartaz-cinetico/referencia/analise.md +83 -0
  459. package/materiais/cartaz-cinetico/referencia/quadro-1.png +0 -0
  460. package/materiais/cartaz-cinetico/referencia/quadro-2.png +0 -0
  461. package/materiais/cartaz-cinetico/referencia/quadro-3.png +0 -0
  462. package/materiais/cartaz-cinetico/referencia/quadro-4.png +0 -0
  463. package/materiais/cartaz-cinetico/referencia/referencia.mp4 +0 -0
  464. package/materiais/cartaz-cinetico/regras.md +131 -0
  465. package/materiais/cartaz-cinetico/sons/Som.tsx +38 -0
  466. package/materiais/cartaz-cinetico/texturas/Fundo.tsx +16 -0
  467. package/materiais/cartaz-cinetico/texturas/Particulas.tsx +22 -0
  468. package/materiais/cartaz-cinetico/tipografia/AssinaturaMarca.tsx +31 -0
  469. package/materiais/cartaz-cinetico/tipografia/CartazPalavra.tsx +40 -0
  470. package/materiais/cartaz-cinetico/tipografia/EcoPalavra.tsx +27 -0
  471. package/materiais/cartaz-cinetico/tipografia/RoletaPalavras.tsx +30 -0
  472. package/materiais/cartaz-cinetico/transicoes/Cena.tsx +41 -0
  473. package/materiais/cartaz-cinetico/transicoes/CorteImpacto.tsx +16 -0
  474. package/materiais/colagem/base.ts +77 -0
  475. package/materiais/colagem/camera/Camera.tsx +21 -0
  476. package/materiais/colagem/camera/CameraDeriva.tsx +37 -0
  477. package/materiais/colagem/cores/paleta.json +30 -0
  478. package/materiais/colagem/cores/paleta.png +0 -0
  479. package/materiais/colagem/formas/FitaAdesiva.tsx +11 -0
  480. package/materiais/colagem/formas/FotoRasgada.tsx +26 -0
  481. package/materiais/colagem/formas/ListaRecortes.tsx +23 -0
  482. package/materiais/colagem/formas/NotaDatilografada.tsx +35 -0
  483. package/materiais/colagem/formas/RecorteForma.tsx +23 -0
  484. package/materiais/colagem/lib/rasgado.ts +16 -0
  485. package/materiais/colagem/pecas.json +547 -0
  486. package/materiais/colagem/referencia/analise.md +82 -0
  487. package/materiais/colagem/referencia/quadro-1.png +0 -0
  488. package/materiais/colagem/referencia/quadro-2.png +0 -0
  489. package/materiais/colagem/referencia/quadro-3.png +0 -0
  490. package/materiais/colagem/referencia/quadro-4.png +0 -0
  491. package/materiais/colagem/referencia/referencia.mp4 +0 -0
  492. package/materiais/colagem/regras.md +129 -0
  493. package/materiais/colagem/sons/Som.tsx +30 -0
  494. package/materiais/colagem/texturas/Fundo.tsx +16 -0
  495. package/materiais/colagem/texturas/Particulas.tsx +22 -0
  496. package/materiais/colagem/tipografia/AssinaturaMarca.tsx +17 -0
  497. package/materiais/colagem/tipografia/TituloRecorte.tsx +34 -0
  498. package/materiais/colagem/transicoes/Cena.tsx +36 -0
  499. package/materiais/colagem/transicoes/CorteImpacto.tsx +16 -0
  500. package/materiais/contagem/base.ts +79 -0
  501. package/materiais/contagem/camera/CameraDeriva.tsx +37 -0
  502. package/materiais/contagem/cores/paleta.json +27 -0
  503. package/materiais/contagem/cores/paleta.png +0 -0
  504. package/materiais/contagem/formas/AnelTempo.tsx +36 -0
  505. package/materiais/contagem/formas/BarraDias.tsx +41 -0
  506. package/materiais/contagem/formas/CarimboData.tsx +37 -0
  507. package/materiais/contagem/formas/RelogioFlip.tsx +51 -0
  508. package/materiais/contagem/pecas.json +509 -0
  509. package/materiais/contagem/referencia/analise.md +85 -0
  510. package/materiais/contagem/referencia/quadro-1.png +0 -0
  511. package/materiais/contagem/referencia/quadro-2.png +0 -0
  512. package/materiais/contagem/referencia/quadro-3.png +0 -0
  513. package/materiais/contagem/referencia/quadro-4.png +0 -0
  514. package/materiais/contagem/referencia/referencia.mp4 +0 -0
  515. package/materiais/contagem/regras.md +134 -0
  516. package/materiais/contagem/sons/Som.tsx +41 -0
  517. package/materiais/contagem/texturas/Fundo.tsx +27 -0
  518. package/materiais/contagem/texturas/Particulas.tsx +22 -0
  519. package/materiais/contagem/tipografia/NumeroRolando.tsx +49 -0
  520. package/materiais/contagem/transicoes/Cena.tsx +39 -0
  521. package/materiais/contagem/transicoes/CorteImpacto.tsx +16 -0
  522. package/materiais/convite-evento/base.ts +82 -0
  523. package/materiais/convite-evento/camera/CameraDeriva.tsx +37 -0
  524. package/materiais/convite-evento/cores/paleta.json +27 -0
  525. package/materiais/convite-evento/cores/paleta.png +0 -0
  526. package/materiais/convite-evento/formas/BotaoInscricao.tsx +36 -0
  527. package/materiais/convite-evento/formas/DataGigante.tsx +37 -0
  528. package/materiais/convite-evento/formas/IngressoBilhete.tsx +40 -0
  529. package/materiais/convite-evento/formas/LugarGigante.tsx +38 -0
  530. package/materiais/convite-evento/formas/SeloRotativo.tsx +32 -0
  531. package/materiais/convite-evento/pecas.json +511 -0
  532. package/materiais/convite-evento/referencia/analise.md +84 -0
  533. package/materiais/convite-evento/referencia/quadro-1.png +0 -0
  534. package/materiais/convite-evento/referencia/quadro-2.png +0 -0
  535. package/materiais/convite-evento/referencia/quadro-3.png +0 -0
  536. package/materiais/convite-evento/referencia/quadro-4.png +0 -0
  537. package/materiais/convite-evento/referencia/referencia.mp4 +0 -0
  538. package/materiais/convite-evento/regras.md +135 -0
  539. package/materiais/convite-evento/sons/Som.tsx +40 -0
  540. package/materiais/convite-evento/texturas/Fundo.tsx +30 -0
  541. package/materiais/convite-evento/texturas/Particulas.tsx +22 -0
  542. package/materiais/convite-evento/tipografia/TituloEvento.tsx +33 -0
  543. package/materiais/convite-evento/transicoes/Cena.tsx +39 -0
  544. package/materiais/convite-evento/transicoes/CorteImpacto.tsx +16 -0
  545. package/materiais/corte-podcast/base.ts +82 -0
  546. package/materiais/corte-podcast/camera/CameraDeriva.tsx +37 -0
  547. package/materiais/corte-podcast/cores/paleta.json +28 -0
  548. package/materiais/corte-podcast/cores/paleta.png +0 -0
  549. package/materiais/corte-podcast/formas/BarraEpisodio.tsx +43 -0
  550. package/materiais/corte-podcast/formas/CartaoConvidado.tsx +32 -0
  551. package/materiais/corte-podcast/formas/OndaAudio.tsx +41 -0
  552. package/materiais/corte-podcast/formas/SeloEpisodio.tsx +33 -0
  553. package/materiais/corte-podcast/pecas.json +516 -0
  554. package/materiais/corte-podcast/referencia/analise.md +84 -0
  555. package/materiais/corte-podcast/referencia/quadro-1.png +0 -0
  556. package/materiais/corte-podcast/referencia/quadro-2.png +0 -0
  557. package/materiais/corte-podcast/referencia/quadro-3.png +0 -0
  558. package/materiais/corte-podcast/referencia/quadro-4.png +0 -0
  559. package/materiais/corte-podcast/referencia/referencia.mp4 +0 -0
  560. package/materiais/corte-podcast/regras.md +132 -0
  561. package/materiais/corte-podcast/sons/Som.tsx +40 -0
  562. package/materiais/corte-podcast/texturas/Fundo.tsx +27 -0
  563. package/materiais/corte-podcast/texturas/Particulas.tsx +22 -0
  564. package/materiais/corte-podcast/tipografia/CitacaoGrande.tsx +42 -0
  565. package/materiais/corte-podcast/tipografia/LegendaKaraoke.tsx +32 -0
  566. package/materiais/corte-podcast/transicoes/Cena.tsx +41 -0
  567. package/materiais/corte-podcast/transicoes/CorteImpacto.tsx +16 -0
  568. package/materiais/cubos/base.ts +97 -0
  569. package/materiais/cubos/camera/CameraDeriva.tsx +37 -0
  570. package/materiais/cubos/cores/paleta.json +29 -0
  571. package/materiais/cubos/cores/paleta.png +0 -0
  572. package/materiais/cubos/formas/Cubo.tsx +40 -0
  573. package/materiais/cubos/formas/CuboGiratorio.tsx +37 -0
  574. package/materiais/cubos/formas/MontagemDeCubos.tsx +58 -0
  575. package/materiais/cubos/formas/PlacaBloco.tsx +29 -0
  576. package/materiais/cubos/formas/TorreDeCubos.tsx +39 -0
  577. package/materiais/cubos/pecas.json +477 -0
  578. package/materiais/cubos/referencia/analise.md +83 -0
  579. package/materiais/cubos/referencia/quadro-1.png +0 -0
  580. package/materiais/cubos/referencia/quadro-2.png +0 -0
  581. package/materiais/cubos/referencia/quadro-3.png +0 -0
  582. package/materiais/cubos/referencia/quadro-4.png +0 -0
  583. package/materiais/cubos/referencia/referencia.mp4 +0 -0
  584. package/materiais/cubos/regras.md +136 -0
  585. package/materiais/cubos/sons/Som.tsx +33 -0
  586. package/materiais/cubos/texturas/Fundo.tsx +15 -0
  587. package/materiais/cubos/texturas/Particulas.tsx +22 -0
  588. package/materiais/cubos/tipografia/AssinaturaMarca.tsx +29 -0
  589. package/materiais/cubos/transicoes/Cena.tsx +48 -0
  590. package/materiais/cubos/transicoes/CorteImpacto.tsx +16 -0
  591. package/materiais/dashboard-dados/base.ts +87 -0
  592. package/materiais/dashboard-dados/camera/Camera.tsx +23 -0
  593. package/materiais/dashboard-dados/camera/CameraDeriva.tsx +37 -0
  594. package/materiais/dashboard-dados/cores/paleta.json +30 -0
  595. package/materiais/dashboard-dados/cores/paleta.png +0 -0
  596. package/materiais/dashboard-dados/formas/BarrasCrescendo.tsx +27 -0
  597. package/materiais/dashboard-dados/formas/LinhaTendencia.tsx +29 -0
  598. package/materiais/dashboard-dados/formas/RankingBarras.tsx +27 -0
  599. package/materiais/dashboard-dados/formas/RoscaDados.tsx +39 -0
  600. package/materiais/dashboard-dados/pecas.json +490 -0
  601. package/materiais/dashboard-dados/referencia/analise.md +84 -0
  602. package/materiais/dashboard-dados/referencia/quadro-1.png +0 -0
  603. package/materiais/dashboard-dados/referencia/quadro-2.png +0 -0
  604. package/materiais/dashboard-dados/referencia/quadro-3.png +0 -0
  605. package/materiais/dashboard-dados/referencia/quadro-4.png +0 -0
  606. package/materiais/dashboard-dados/referencia/referencia.mp4 +0 -0
  607. package/materiais/dashboard-dados/regras.md +130 -0
  608. package/materiais/dashboard-dados/sons/Som.tsx +39 -0
  609. package/materiais/dashboard-dados/texturas/Fundo.tsx +12 -0
  610. package/materiais/dashboard-dados/texturas/Particulas.tsx +22 -0
  611. package/materiais/dashboard-dados/tipografia/AssinaturaMarca.tsx +19 -0
  612. package/materiais/dashboard-dados/tipografia/NumeroGigante.tsx +21 -0
  613. package/materiais/dashboard-dados/transicoes/Cena.tsx +46 -0
  614. package/materiais/dashboard-dados/transicoes/CorteImpacto.tsx +16 -0
  615. package/materiais/depoimento/base.ts +83 -0
  616. package/materiais/depoimento/camera/CameraDeriva.tsx +37 -0
  617. package/materiais/depoimento/cores/paleta.json +29 -0
  618. package/materiais/depoimento/cores/paleta.png +0 -0
  619. package/materiais/depoimento/formas/Avatar.tsx +37 -0
  620. package/materiais/depoimento/formas/CartaoDepoimento.tsx +69 -0
  621. package/materiais/depoimento/formas/FaixaAvatares.tsx +41 -0
  622. package/materiais/depoimento/formas/NotaGigante.tsx +38 -0
  623. package/materiais/depoimento/formas/PilhaCartoes.tsx +37 -0
  624. package/materiais/depoimento/formas/SeloVerificado.tsx +29 -0
  625. package/materiais/depoimento/pecas.json +548 -0
  626. package/materiais/depoimento/referencia/analise.md +84 -0
  627. package/materiais/depoimento/referencia/quadro-1.png +0 -0
  628. package/materiais/depoimento/referencia/quadro-2.png +0 -0
  629. package/materiais/depoimento/referencia/quadro-3.png +0 -0
  630. package/materiais/depoimento/referencia/quadro-4.png +0 -0
  631. package/materiais/depoimento/referencia/referencia.mp4 +0 -0
  632. package/materiais/depoimento/regras.md +135 -0
  633. package/materiais/depoimento/sons/Som.tsx +41 -0
  634. package/materiais/depoimento/texturas/Estrelas.tsx +34 -0
  635. package/materiais/depoimento/texturas/Fundo.tsx +23 -0
  636. package/materiais/depoimento/texturas/Particulas.tsx +22 -0
  637. package/materiais/depoimento/transicoes/Cena.tsx +39 -0
  638. package/materiais/depoimento/transicoes/CorteImpacto.tsx +16 -0
  639. package/materiais/infografico/base.ts +80 -0
  640. package/materiais/infografico/camera/CameraDeriva.tsx +37 -0
  641. package/materiais/infografico/cores/paleta.json +28 -0
  642. package/materiais/infografico/cores/paleta.png +0 -0
  643. package/materiais/infografico/formas/Anotacao.tsx +34 -0
  644. package/materiais/infografico/formas/CadeiaPassos.tsx +49 -0
  645. package/materiais/infografico/formas/GraficoBarras.tsx +41 -0
  646. package/materiais/infografico/formas/Icone.tsx +35 -0
  647. package/materiais/infografico/formas/NoProcesso.tsx +33 -0
  648. package/materiais/infografico/formas/SetaCurva.tsx +33 -0
  649. package/materiais/infografico/pecas.json +540 -0
  650. package/materiais/infografico/referencia/analise.md +84 -0
  651. package/materiais/infografico/referencia/quadro-1.png +0 -0
  652. package/materiais/infografico/referencia/quadro-2.png +0 -0
  653. package/materiais/infografico/referencia/quadro-3.png +0 -0
  654. package/materiais/infografico/referencia/quadro-4.png +0 -0
  655. package/materiais/infografico/referencia/referencia.mp4 +0 -0
  656. package/materiais/infografico/regras.md +132 -0
  657. package/materiais/infografico/sons/Som.tsx +40 -0
  658. package/materiais/infografico/texturas/Fundo.tsx +23 -0
  659. package/materiais/infografico/texturas/Particulas.tsx +22 -0
  660. package/materiais/infografico/tipografia/NumeroDestaque.tsx +35 -0
  661. package/materiais/infografico/transicoes/Cena.tsx +39 -0
  662. package/materiais/infografico/transicoes/CorteImpacto.tsx +16 -0
  663. package/materiais/isometrico/base.ts +86 -0
  664. package/materiais/isometrico/camera/Camera.tsx +23 -0
  665. package/materiais/isometrico/camera/CameraDeriva.tsx +37 -0
  666. package/materiais/isometrico/cores/paleta.json +29 -0
  667. package/materiais/isometrico/cores/paleta.png +0 -0
  668. package/materiais/isometrico/formas/BlocosMontando.tsx +36 -0
  669. package/materiais/isometrico/formas/CidadeDeDados.tsx +33 -0
  670. package/materiais/isometrico/formas/RedeDeBlocos.tsx +41 -0
  671. package/materiais/isometrico/pecas.json +503 -0
  672. package/materiais/isometrico/referencia/analise.md +83 -0
  673. package/materiais/isometrico/referencia/quadro-1.png +0 -0
  674. package/materiais/isometrico/referencia/quadro-2.png +0 -0
  675. package/materiais/isometrico/referencia/quadro-3.png +0 -0
  676. package/materiais/isometrico/referencia/quadro-4.png +0 -0
  677. package/materiais/isometrico/referencia/referencia.mp4 +0 -0
  678. package/materiais/isometrico/regras.md +125 -0
  679. package/materiais/isometrico/sons/Som.tsx +39 -0
  680. package/materiais/isometrico/texturas/Fundo.tsx +13 -0
  681. package/materiais/isometrico/texturas/Particulas.tsx +22 -0
  682. package/materiais/isometrico/tipografia/AssinaturaMarca.tsx +24 -0
  683. package/materiais/isometrico/tipografia/LegendaPlaca.tsx +18 -0
  684. package/materiais/isometrico/tipografia/TextoNoChao.tsx +28 -0
  685. package/materiais/isometrico/transicoes/Cena.tsx +46 -0
  686. package/materiais/isometrico/transicoes/CorteImpacto.tsx +16 -0
  687. package/materiais/jornal/base.ts +76 -0
  688. package/materiais/jornal/camera/CameraDeriva.tsx +37 -0
  689. package/materiais/jornal/cores/paleta.json +27 -0
  690. package/materiais/jornal/cores/paleta.png +0 -0
  691. package/materiais/jornal/formas/Cabecalho.tsx +21 -0
  692. package/materiais/jornal/formas/Carimbo.tsx +18 -0
  693. package/materiais/jornal/formas/Colunas.tsx +24 -0
  694. package/materiais/jornal/formas/FotoMeiaTinta.tsx +20 -0
  695. package/materiais/jornal/formas/JornalGirando.tsx +27 -0
  696. package/materiais/jornal/formas/Ticker.tsx +19 -0
  697. package/materiais/jornal/pecas.json +535 -0
  698. package/materiais/jornal/referencia/analise.md +81 -0
  699. package/materiais/jornal/referencia/quadro-1.png +0 -0
  700. package/materiais/jornal/referencia/quadro-2.png +0 -0
  701. package/materiais/jornal/referencia/quadro-3.png +0 -0
  702. package/materiais/jornal/referencia/quadro-4.png +0 -0
  703. package/materiais/jornal/referencia/referencia.mp4 +0 -0
  704. package/materiais/jornal/regras.md +131 -0
  705. package/materiais/jornal/sons/Som.tsx +38 -0
  706. package/materiais/jornal/texturas/Fundo.tsx +18 -0
  707. package/materiais/jornal/texturas/Particulas.tsx +22 -0
  708. package/materiais/jornal/tipografia/AssinaturaMarca.tsx +25 -0
  709. package/materiais/jornal/tipografia/Manchete.tsx +30 -0
  710. package/materiais/jornal/transicoes/Cena.tsx +41 -0
  711. package/materiais/jornal/transicoes/CorteImpacto.tsx +16 -0
  712. package/materiais/legenda-viva/base.ts +73 -0
  713. package/materiais/legenda-viva/camera/CameraDeriva.tsx +37 -0
  714. package/materiais/legenda-viva/cores/paleta.json +27 -0
  715. package/materiais/legenda-viva/cores/paleta.png +0 -0
  716. package/materiais/legenda-viva/formas/ChipTema.tsx +19 -0
  717. package/materiais/legenda-viva/formas/OndaVoz.tsx +23 -0
  718. package/materiais/legenda-viva/formas/QuadroFalante.tsx +17 -0
  719. package/materiais/legenda-viva/pecas.json +503 -0
  720. package/materiais/legenda-viva/referencia/analise.md +79 -0
  721. package/materiais/legenda-viva/referencia/quadro-1.png +0 -0
  722. package/materiais/legenda-viva/referencia/quadro-2.png +0 -0
  723. package/materiais/legenda-viva/referencia/quadro-3.png +0 -0
  724. package/materiais/legenda-viva/referencia/quadro-4.png +0 -0
  725. package/materiais/legenda-viva/referencia/referencia.mp4 +0 -0
  726. package/materiais/legenda-viva/regras.md +130 -0
  727. package/materiais/legenda-viva/sons/Som.tsx +38 -0
  728. package/materiais/legenda-viva/texturas/Fundo.tsx +6 -0
  729. package/materiais/legenda-viva/texturas/Particulas.tsx +22 -0
  730. package/materiais/legenda-viva/tipografia/AssinaturaMarca.tsx +29 -0
  731. package/materiais/legenda-viva/tipografia/LegendaCaixa.tsx +36 -0
  732. package/materiais/legenda-viva/tipografia/LegendaPalavra.tsx +32 -0
  733. package/materiais/legenda-viva/tipografia/PalavraGigante.tsx +18 -0
  734. package/materiais/legenda-viva/transicoes/Cena.tsx +41 -0
  735. package/materiais/legenda-viva/transicoes/CorteImpacto.tsx +16 -0
  736. package/materiais/luxo/base.ts +85 -0
  737. package/materiais/luxo/camera/CameraDeriva.tsx +37 -0
  738. package/materiais/luxo/cores/paleta.json +28 -0
  739. package/materiais/luxo/cores/paleta.png +0 -0
  740. package/materiais/luxo/formas/ConviteOuro.tsx +34 -0
  741. package/materiais/luxo/formas/LinhaOuro.tsx +24 -0
  742. package/materiais/luxo/formas/MolduraArco.tsx +36 -0
  743. package/materiais/luxo/formas/Monograma.tsx +35 -0
  744. package/materiais/luxo/pecas.json +505 -0
  745. package/materiais/luxo/referencia/analise.md +82 -0
  746. package/materiais/luxo/referencia/quadro-1.png +0 -0
  747. package/materiais/luxo/referencia/quadro-2.png +0 -0
  748. package/materiais/luxo/referencia/quadro-3.png +0 -0
  749. package/materiais/luxo/referencia/quadro-4.png +0 -0
  750. package/materiais/luxo/referencia/referencia.mp4 +0 -0
  751. package/materiais/luxo/regras.md +132 -0
  752. package/materiais/luxo/sons/Som.tsx +40 -0
  753. package/materiais/luxo/texturas/Fundo.tsx +26 -0
  754. package/materiais/luxo/texturas/Particulas.tsx +22 -0
  755. package/materiais/luxo/tipografia/LegendaFina.tsx +25 -0
  756. package/materiais/luxo/tipografia/TituloSerifa.tsx +35 -0
  757. package/materiais/luxo/transicoes/Cena.tsx +36 -0
  758. package/materiais/luxo/transicoes/CorteImpacto.tsx +16 -0
  759. package/materiais/mapa/base.ts +89 -0
  760. package/materiais/mapa/camera/CameraDeriva.tsx +37 -0
  761. package/materiais/mapa/cores/paleta.json +33 -0
  762. package/materiais/mapa/cores/paleta.png +0 -0
  763. package/materiais/mapa/formas/CartaoEndereco.tsx +40 -0
  764. package/materiais/mapa/formas/ChipTempo.tsx +29 -0
  765. package/materiais/mapa/formas/MapaBase.tsx +63 -0
  766. package/materiais/mapa/formas/Pino.tsx +38 -0
  767. package/materiais/mapa/formas/RotaAnimada.tsx +38 -0
  768. package/materiais/mapa/pecas.json +529 -0
  769. package/materiais/mapa/referencia/analise.md +85 -0
  770. package/materiais/mapa/referencia/quadro-1.png +0 -0
  771. package/materiais/mapa/referencia/quadro-2.png +0 -0
  772. package/materiais/mapa/referencia/quadro-3.png +0 -0
  773. package/materiais/mapa/referencia/quadro-4.png +0 -0
  774. package/materiais/mapa/referencia/referencia.mp4 +0 -0
  775. package/materiais/mapa/regras.md +135 -0
  776. package/materiais/mapa/sons/Som.tsx +41 -0
  777. package/materiais/mapa/texturas/Fundo.tsx +25 -0
  778. package/materiais/mapa/texturas/Particulas.tsx +22 -0
  779. package/materiais/mapa/tipografia/TituloLocal.tsx +38 -0
  780. package/materiais/mapa/transicoes/Cena.tsx +41 -0
  781. package/materiais/mapa/transicoes/CorteImpacto.tsx +16 -0
  782. package/materiais/massinha/base.ts +79 -0
  783. package/materiais/massinha/camera/Camera.tsx +21 -0
  784. package/materiais/massinha/camera/CameraDeriva.tsx +37 -0
  785. package/materiais/massinha/cores/paleta.json +32 -0
  786. package/materiais/massinha/cores/paleta.png +0 -0
  787. package/materiais/massinha/formas/BichinhoMassa.tsx +30 -0
  788. package/materiais/massinha/formas/BolasMassa.tsx +25 -0
  789. package/materiais/massinha/formas/FormaMassa.tsx +23 -0
  790. package/materiais/massinha/formas/ListaMassa.tsx +19 -0
  791. package/materiais/massinha/formas/Overlay.tsx +11 -0
  792. package/materiais/massinha/formas/PlacaMassa.tsx +24 -0
  793. package/materiais/massinha/pecas.json +544 -0
  794. package/materiais/massinha/referencia/analise.md +81 -0
  795. package/materiais/massinha/referencia/quadro-1.png +0 -0
  796. package/materiais/massinha/referencia/quadro-2.png +0 -0
  797. package/materiais/massinha/referencia/quadro-3.png +0 -0
  798. package/materiais/massinha/referencia/quadro-4.png +0 -0
  799. package/materiais/massinha/referencia/referencia.mp4 +0 -0
  800. package/materiais/massinha/regras.md +129 -0
  801. package/materiais/massinha/sons/Som.tsx +30 -0
  802. package/materiais/massinha/texturas/Fundo.tsx +12 -0
  803. package/materiais/massinha/texturas/Particulas.tsx +22 -0
  804. package/materiais/massinha/tipografia/AssinaturaMarca.tsx +20 -0
  805. package/materiais/massinha/tipografia/TituloMassa.tsx +31 -0
  806. package/materiais/massinha/transicoes/Cena.tsx +36 -0
  807. package/materiais/massinha/transicoes/CorteImpacto.tsx +16 -0
  808. package/materiais/memphis/base.ts +78 -0
  809. package/materiais/memphis/camera/Camera.tsx +21 -0
  810. package/materiais/memphis/camera/CameraDeriva.tsx +37 -0
  811. package/materiais/memphis/cores/paleta.json +31 -0
  812. package/materiais/memphis/cores/paleta.png +0 -0
  813. package/materiais/memphis/formas/CartaoMemphis.tsx +16 -0
  814. package/materiais/memphis/formas/FitaMarquee.tsx +21 -0
  815. package/materiais/memphis/formas/FormasMemphis.tsx +46 -0
  816. package/materiais/memphis/formas/ListaPilulas.tsx +17 -0
  817. package/materiais/memphis/formas/Overlay.tsx +23 -0
  818. package/materiais/memphis/pecas.json +544 -0
  819. package/materiais/memphis/referencia/analise.md +82 -0
  820. package/materiais/memphis/referencia/quadro-1.png +0 -0
  821. package/materiais/memphis/referencia/quadro-2.png +0 -0
  822. package/materiais/memphis/referencia/quadro-3.png +0 -0
  823. package/materiais/memphis/referencia/quadro-4.png +0 -0
  824. package/materiais/memphis/referencia/referencia.mp4 +0 -0
  825. package/materiais/memphis/regras.md +130 -0
  826. package/materiais/memphis/sons/Som.tsx +30 -0
  827. package/materiais/memphis/texturas/Fundo.tsx +15 -0
  828. package/materiais/memphis/texturas/Particulas.tsx +22 -0
  829. package/materiais/memphis/tipografia/AssinaturaMarca.tsx +20 -0
  830. package/materiais/memphis/tipografia/NumeroGigante.tsx +19 -0
  831. package/materiais/memphis/tipografia/TituloMemphis.tsx +28 -0
  832. package/materiais/memphis/transicoes/Cena.tsx +36 -0
  833. package/materiais/memphis/transicoes/CorteImpacto.tsx +16 -0
  834. package/materiais/metal-liquido/base.ts +94 -0
  835. package/materiais/metal-liquido/camera/CameraDeriva.tsx +37 -0
  836. package/materiais/metal-liquido/cores/paleta.json +30 -0
  837. package/materiais/metal-liquido/cores/paleta.png +0 -0
  838. package/materiais/metal-liquido/formas/AnelCromo.tsx +28 -0
  839. package/materiais/metal-liquido/formas/BolhasCromadas.tsx +53 -0
  840. package/materiais/metal-liquido/formas/EsferaCromo.tsx +32 -0
  841. package/materiais/metal-liquido/formas/PilulaCromo.tsx +23 -0
  842. package/materiais/metal-liquido/pecas.json +469 -0
  843. package/materiais/metal-liquido/referencia/analise.md +84 -0
  844. package/materiais/metal-liquido/referencia/quadro-1.png +0 -0
  845. package/materiais/metal-liquido/referencia/quadro-2.png +0 -0
  846. package/materiais/metal-liquido/referencia/quadro-3.png +0 -0
  847. package/materiais/metal-liquido/referencia/quadro-4.png +0 -0
  848. package/materiais/metal-liquido/referencia/referencia.mp4 +0 -0
  849. package/materiais/metal-liquido/regras.md +135 -0
  850. package/materiais/metal-liquido/sons/Som.tsx +33 -0
  851. package/materiais/metal-liquido/texturas/Fundo.tsx +20 -0
  852. package/materiais/metal-liquido/texturas/Particulas.tsx +22 -0
  853. package/materiais/metal-liquido/tipografia/AssinaturaMarca.tsx +26 -0
  854. package/materiais/metal-liquido/tipografia/TituloCromo.tsx +32 -0
  855. package/materiais/metal-liquido/transicoes/Cena.tsx +48 -0
  856. package/materiais/metal-liquido/transicoes/CorteImpacto.tsx +16 -0
  857. package/materiais/minimal/base.ts +80 -0
  858. package/materiais/minimal/camera/CameraDeriva.tsx +37 -0
  859. package/materiais/minimal/cores/paleta.json +26 -0
  860. package/materiais/minimal/cores/paleta.png +0 -0
  861. package/materiais/minimal/formas/FormaMorph.tsx +44 -0
  862. package/materiais/minimal/formas/LinhaFina.tsx +24 -0
  863. package/materiais/minimal/formas/PontoMovel.tsx +27 -0
  864. package/materiais/minimal/pecas.json +505 -0
  865. package/materiais/minimal/referencia/analise.md +84 -0
  866. package/materiais/minimal/referencia/quadro-1.png +0 -0
  867. package/materiais/minimal/referencia/quadro-2.png +0 -0
  868. package/materiais/minimal/referencia/quadro-3.png +0 -0
  869. package/materiais/minimal/referencia/quadro-4.png +0 -0
  870. package/materiais/minimal/referencia/referencia.mp4 +0 -0
  871. package/materiais/minimal/regras.md +127 -0
  872. package/materiais/minimal/sons/Som.tsx +40 -0
  873. package/materiais/minimal/texturas/Fundo.tsx +20 -0
  874. package/materiais/minimal/texturas/Particulas.tsx +22 -0
  875. package/materiais/minimal/tipografia/FraseUnica.tsx +33 -0
  876. package/materiais/minimal/tipografia/NumeroSolo.tsx +33 -0
  877. package/materiais/minimal/tipografia/RodapeMinimal.tsx +26 -0
  878. package/materiais/minimal/transicoes/Cena.tsx +39 -0
  879. package/materiais/minimal/transicoes/CorteImpacto.tsx +16 -0
  880. package/materiais/neon-cidade/base.ts +100 -0
  881. package/materiais/neon-cidade/camera/CameraDeriva.tsx +37 -0
  882. package/materiais/neon-cidade/cores/paleta.json +29 -0
  883. package/materiais/neon-cidade/cores/paleta.png +0 -0
  884. package/materiais/neon-cidade/formas/CaixaLuminosa.tsx +40 -0
  885. package/materiais/neon-cidade/formas/FormaNeon.tsx +42 -0
  886. package/materiais/neon-cidade/formas/Horizonte.tsx +34 -0
  887. package/materiais/neon-cidade/formas/LetreiroNeon.tsx +46 -0
  888. package/materiais/neon-cidade/pecas.json +464 -0
  889. package/materiais/neon-cidade/referencia/analise.md +84 -0
  890. package/materiais/neon-cidade/referencia/quadro-1.png +0 -0
  891. package/materiais/neon-cidade/referencia/quadro-2.png +0 -0
  892. package/materiais/neon-cidade/referencia/quadro-3.png +0 -0
  893. package/materiais/neon-cidade/referencia/quadro-4.png +0 -0
  894. package/materiais/neon-cidade/referencia/referencia.mp4 +0 -0
  895. package/materiais/neon-cidade/regras.md +137 -0
  896. package/materiais/neon-cidade/sons/Som.tsx +33 -0
  897. package/materiais/neon-cidade/texturas/Chuva.tsx +23 -0
  898. package/materiais/neon-cidade/texturas/Fundo.tsx +18 -0
  899. package/materiais/neon-cidade/texturas/Particulas.tsx +22 -0
  900. package/materiais/neon-cidade/tipografia/AssinaturaMarca.tsx +24 -0
  901. package/materiais/neon-cidade/transicoes/Cena.tsx +48 -0
  902. package/materiais/neon-cidade/transicoes/CorteImpacto.tsx +16 -0
  903. package/materiais/notion-editorial/base.ts +87 -0
  904. package/materiais/notion-editorial/camera/Camera.tsx +23 -0
  905. package/materiais/notion-editorial/camera/CameraDeriva.tsx +37 -0
  906. package/materiais/notion-editorial/cores/paleta.json +28 -0
  907. package/materiais/notion-editorial/cores/paleta.png +0 -0
  908. package/materiais/notion-editorial/formas/BlocoNota.tsx +38 -0
  909. package/materiais/notion-editorial/formas/Diagrama.tsx +29 -0
  910. package/materiais/notion-editorial/formas/PassosNumerados.tsx +23 -0
  911. package/materiais/notion-editorial/formas/RabiscoIcone.tsx +33 -0
  912. package/materiais/notion-editorial/pecas.json +496 -0
  913. package/materiais/notion-editorial/referencia/analise.md +83 -0
  914. package/materiais/notion-editorial/referencia/quadro-1.png +0 -0
  915. package/materiais/notion-editorial/referencia/quadro-2.png +0 -0
  916. package/materiais/notion-editorial/referencia/quadro-3.png +0 -0
  917. package/materiais/notion-editorial/referencia/quadro-4.png +0 -0
  918. package/materiais/notion-editorial/referencia/referencia.mp4 +0 -0
  919. package/materiais/notion-editorial/regras.md +126 -0
  920. package/materiais/notion-editorial/sons/Som.tsx +39 -0
  921. package/materiais/notion-editorial/texturas/Fundo.tsx +12 -0
  922. package/materiais/notion-editorial/texturas/Particulas.tsx +22 -0
  923. package/materiais/notion-editorial/tipografia/AssinaturaMarca.tsx +20 -0
  924. package/materiais/notion-editorial/tipografia/TextoSerifa.tsx +53 -0
  925. package/materiais/notion-editorial/transicoes/Cena.tsx +46 -0
  926. package/materiais/notion-editorial/transicoes/CorteImpacto.tsx +16 -0
  927. package/materiais/papel-recortado/base.ts +51 -0
  928. package/materiais/papel-recortado/camera/Camera.tsx +28 -0
  929. package/materiais/papel-recortado/camera/CameraDeriva.tsx +37 -0
  930. package/materiais/papel-recortado/cores/paleta.json +28 -0
  931. package/materiais/papel-recortado/cores/paleta.png +0 -0
  932. package/materiais/papel-recortado/formas/CamadaPapel.tsx +81 -0
  933. package/materiais/papel-recortado/formas/CartaoCamadas.tsx +38 -0
  934. package/materiais/papel-recortado/formas/EtiquetaPapel.tsx +40 -0
  935. package/materiais/papel-recortado/formas/Fita.tsx +21 -0
  936. package/materiais/papel-recortado/formas/FolhaPopUp.tsx +49 -0
  937. package/materiais/papel-recortado/formas/MolduraPapel.tsx +12 -0
  938. package/materiais/papel-recortado/pecas.json +545 -0
  939. package/materiais/papel-recortado/referencia/analise.md +82 -0
  940. package/materiais/papel-recortado/referencia/quadro-1.png +0 -0
  941. package/materiais/papel-recortado/referencia/quadro-2.png +0 -0
  942. package/materiais/papel-recortado/referencia/quadro-3.png +0 -0
  943. package/materiais/papel-recortado/referencia/quadro-4.png +0 -0
  944. package/materiais/papel-recortado/referencia/referencia.mp4 +0 -0
  945. package/materiais/papel-recortado/regras.md +117 -0
  946. package/materiais/papel-recortado/sons/Som.tsx +30 -0
  947. package/materiais/papel-recortado/texturas/Fundo.tsx +10 -0
  948. package/materiais/papel-recortado/texturas/Particulas.tsx +22 -0
  949. package/materiais/papel-recortado/tipografia/LetrasRecortadas.tsx +48 -0
  950. package/materiais/papel-recortado/transicoes/Cena.tsx +29 -0
  951. package/materiais/papel-recortado/transicoes/CorteImpacto.tsx +16 -0
  952. package/materiais/pixel/base.ts +79 -0
  953. package/materiais/pixel/camera/Camera.tsx +21 -0
  954. package/materiais/pixel/camera/CameraDeriva.tsx +37 -0
  955. package/materiais/pixel/cores/paleta.json +32 -0
  956. package/materiais/pixel/cores/paleta.png +0 -0
  957. package/materiais/pixel/formas/CaixaDialogo.tsx +22 -0
  958. package/materiais/pixel/formas/HudPlacar.tsx +19 -0
  959. package/materiais/pixel/formas/MenuPixel.tsx +19 -0
  960. package/materiais/pixel/formas/Overlay.tsx +14 -0
  961. package/materiais/pixel/formas/Sprite.tsx +33 -0
  962. package/materiais/pixel/pecas.json +543 -0
  963. package/materiais/pixel/referencia/analise.md +82 -0
  964. package/materiais/pixel/referencia/quadro-1.png +0 -0
  965. package/materiais/pixel/referencia/quadro-2.png +0 -0
  966. package/materiais/pixel/referencia/quadro-3.png +0 -0
  967. package/materiais/pixel/referencia/quadro-4.png +0 -0
  968. package/materiais/pixel/referencia/referencia.mp4 +0 -0
  969. package/materiais/pixel/regras.md +129 -0
  970. package/materiais/pixel/sons/Som.tsx +30 -0
  971. package/materiais/pixel/texturas/ChuvaDeSprites.tsx +15 -0
  972. package/materiais/pixel/texturas/Fundo.tsx +23 -0
  973. package/materiais/pixel/texturas/Particulas.tsx +22 -0
  974. package/materiais/pixel/tipografia/AssinaturaMarca.tsx +18 -0
  975. package/materiais/pixel/tipografia/TituloPixel.tsx +31 -0
  976. package/materiais/pixel/transicoes/Cena.tsx +36 -0
  977. package/materiais/pixel/transicoes/CorteImpacto.tsx +16 -0
  978. package/materiais/pontos-3d/base.ts +92 -0
  979. package/materiais/pontos-3d/camera/CameraDeriva.tsx +37 -0
  980. package/materiais/pontos-3d/cores/paleta.json +28 -0
  981. package/materiais/pontos-3d/cores/paleta.png +0 -0
  982. package/materiais/pontos-3d/formas/NuvemDePontos.tsx +84 -0
  983. package/materiais/pontos-3d/formas/RotuloPonto.tsx +32 -0
  984. package/materiais/pontos-3d/pecas.json +481 -0
  985. package/materiais/pontos-3d/referencia/analise.md +85 -0
  986. package/materiais/pontos-3d/referencia/quadro-1.png +0 -0
  987. package/materiais/pontos-3d/referencia/quadro-2.png +0 -0
  988. package/materiais/pontos-3d/referencia/quadro-3.png +0 -0
  989. package/materiais/pontos-3d/referencia/quadro-4.png +0 -0
  990. package/materiais/pontos-3d/referencia/referencia.mp4 +0 -0
  991. package/materiais/pontos-3d/regras.md +136 -0
  992. package/materiais/pontos-3d/sons/Som.tsx +33 -0
  993. package/materiais/pontos-3d/texturas/Fundo.tsx +20 -0
  994. package/materiais/pontos-3d/texturas/Particulas.tsx +22 -0
  995. package/materiais/pontos-3d/tipografia/AssinaturaMarca.tsx +23 -0
  996. package/materiais/pontos-3d/tipografia/Contador.tsx +32 -0
  997. package/materiais/pontos-3d/tipografia/TextoDePontos.tsx +55 -0
  998. package/materiais/pontos-3d/tipografia/TituloSora.tsx +36 -0
  999. package/materiais/pontos-3d/transicoes/Cena.tsx +48 -0
  1000. package/materiais/pontos-3d/transicoes/CorteImpacto.tsx +16 -0
  1001. package/materiais/produto-3d/base.ts +109 -0
  1002. package/materiais/produto-3d/camera/Camera.tsx +23 -0
  1003. package/materiais/produto-3d/camera/CameraDeriva.tsx +37 -0
  1004. package/materiais/produto-3d/cores/paleta.json +31 -0
  1005. package/materiais/produto-3d/cores/paleta.png +0 -0
  1006. package/materiais/produto-3d/formas/Produto3D.tsx +131 -0
  1007. package/materiais/produto-3d/lib/produto3d-apoio.ts +21 -0
  1008. package/materiais/produto-3d/pecas.json +516 -0
  1009. package/materiais/produto-3d/referencia/analise.md +83 -0
  1010. package/materiais/produto-3d/referencia/quadro-1.png +0 -0
  1011. package/materiais/produto-3d/referencia/quadro-2.png +0 -0
  1012. package/materiais/produto-3d/referencia/quadro-3.png +0 -0
  1013. package/materiais/produto-3d/referencia/quadro-4.png +0 -0
  1014. package/materiais/produto-3d/referencia/referencia.mp4 +0 -0
  1015. package/materiais/produto-3d/regras.md +128 -0
  1016. package/materiais/produto-3d/sons/Som.tsx +39 -0
  1017. package/materiais/produto-3d/texturas/Fundo.tsx +45 -0
  1018. package/materiais/produto-3d/texturas/Particulas.tsx +22 -0
  1019. package/materiais/produto-3d/tipografia/AssinaturaMarca.tsx +28 -0
  1020. package/materiais/produto-3d/tipografia/NumeroDestaque.tsx +35 -0
  1021. package/materiais/produto-3d/tipografia/RotuloChamada.tsx +43 -0
  1022. package/materiais/produto-3d/tipografia/TituloMinimo.tsx +45 -0
  1023. package/materiais/produto-3d/transicoes/Cena.tsx +55 -0
  1024. package/materiais/produto-3d/transicoes/CorteImpacto.tsx +16 -0
  1025. package/materiais/produto-3d/transicoes/VarreduraLuz.tsx +22 -0
  1026. package/materiais/quadro-giz/base.ts +78 -0
  1027. package/materiais/quadro-giz/camera/Camera.tsx +21 -0
  1028. package/materiais/quadro-giz/camera/CameraDeriva.tsx +37 -0
  1029. package/materiais/quadro-giz/cores/paleta.json +31 -0
  1030. package/materiais/quadro-giz/cores/paleta.png +0 -0
  1031. package/materiais/quadro-giz/formas/ApagadorVarrendo.tsx +32 -0
  1032. package/materiais/quadro-giz/formas/CartaoGiz.tsx +25 -0
  1033. package/materiais/quadro-giz/formas/ContaNoQuadro.tsx +34 -0
  1034. package/materiais/quadro-giz/formas/DesenhoGiz.tsx +29 -0
  1035. package/materiais/quadro-giz/formas/ListaGiz.tsx +21 -0
  1036. package/materiais/quadro-giz/formas/Overlay.tsx +12 -0
  1037. package/materiais/quadro-giz/lib/traco.ts +9 -0
  1038. package/materiais/quadro-giz/pecas.json +546 -0
  1039. package/materiais/quadro-giz/referencia/analise.md +82 -0
  1040. package/materiais/quadro-giz/referencia/quadro-1.png +0 -0
  1041. package/materiais/quadro-giz/referencia/quadro-2.png +0 -0
  1042. package/materiais/quadro-giz/referencia/quadro-3.png +0 -0
  1043. package/materiais/quadro-giz/referencia/quadro-4.png +0 -0
  1044. package/materiais/quadro-giz/referencia/referencia.mp4 +0 -0
  1045. package/materiais/quadro-giz/regras.md +132 -0
  1046. package/materiais/quadro-giz/sons/Som.tsx +30 -0
  1047. package/materiais/quadro-giz/texturas/Fundo.tsx +21 -0
  1048. package/materiais/quadro-giz/texturas/Particulas.tsx +22 -0
  1049. package/materiais/quadro-giz/tipografia/AssinaturaMarca.tsx +20 -0
  1050. package/materiais/quadro-giz/tipografia/TituloGiz.tsx +29 -0
  1051. package/materiais/quadro-giz/transicoes/Cena.tsx +36 -0
  1052. package/materiais/quadro-giz/transicoes/CorteImpacto.tsx +16 -0
  1053. package/materiais/rabisco/base.ts +76 -0
  1054. package/materiais/rabisco/camera/Camera.tsx +21 -0
  1055. package/materiais/rabisco/camera/CameraDeriva.tsx +37 -0
  1056. package/materiais/rabisco/cores/paleta.json +29 -0
  1057. package/materiais/rabisco/cores/paleta.png +0 -0
  1058. package/materiais/rabisco/formas/Bonequinho.tsx +31 -0
  1059. package/materiais/rabisco/formas/CartaoRabiscado.tsx +27 -0
  1060. package/materiais/rabisco/formas/ListaRabiscada.tsx +23 -0
  1061. package/materiais/rabisco/formas/TracoDesenhando.tsx +31 -0
  1062. package/materiais/rabisco/lib/traco.ts +10 -0
  1063. package/materiais/rabisco/pecas.json +520 -0
  1064. package/materiais/rabisco/referencia/analise.md +82 -0
  1065. package/materiais/rabisco/referencia/quadro-1.png +0 -0
  1066. package/materiais/rabisco/referencia/quadro-2.png +0 -0
  1067. package/materiais/rabisco/referencia/quadro-3.png +0 -0
  1068. package/materiais/rabisco/referencia/quadro-4.png +0 -0
  1069. package/materiais/rabisco/referencia/referencia.mp4 +0 -0
  1070. package/materiais/rabisco/regras.md +126 -0
  1071. package/materiais/rabisco/sons/Som.tsx +30 -0
  1072. package/materiais/rabisco/texturas/Fundo.tsx +17 -0
  1073. package/materiais/rabisco/texturas/Particulas.tsx +22 -0
  1074. package/materiais/rabisco/tipografia/AssinaturaMarca.tsx +21 -0
  1075. package/materiais/rabisco/tipografia/TituloRabisco.tsx +28 -0
  1076. package/materiais/rabisco/transicoes/Cena.tsx +36 -0
  1077. package/materiais/rabisco/transicoes/CorteImpacto.tsx +16 -0
  1078. package/materiais/retro-70/base.ts +73 -0
  1079. package/materiais/retro-70/camera/CameraDeriva.tsx +37 -0
  1080. package/materiais/retro-70/cores/paleta.json +27 -0
  1081. package/materiais/retro-70/cores/paleta.png +0 -0
  1082. package/materiais/retro-70/formas/ArcoListras.tsx +25 -0
  1083. package/materiais/retro-70/formas/CartaoData.tsx +24 -0
  1084. package/materiais/retro-70/formas/FaixaOnda.tsx +27 -0
  1085. package/materiais/retro-70/formas/Flor70.tsx +25 -0
  1086. package/materiais/retro-70/formas/FotoArredondada.tsx +19 -0
  1087. package/materiais/retro-70/formas/RaiosDeSol.tsx +27 -0
  1088. package/materiais/retro-70/pecas.json +533 -0
  1089. package/materiais/retro-70/referencia/analise.md +81 -0
  1090. package/materiais/retro-70/referencia/quadro-1.png +0 -0
  1091. package/materiais/retro-70/referencia/quadro-2.png +0 -0
  1092. package/materiais/retro-70/referencia/quadro-3.png +0 -0
  1093. package/materiais/retro-70/referencia/quadro-4.png +0 -0
  1094. package/materiais/retro-70/referencia/referencia.mp4 +0 -0
  1095. package/materiais/retro-70/regras.md +132 -0
  1096. package/materiais/retro-70/sons/Som.tsx +38 -0
  1097. package/materiais/retro-70/texturas/Fundo.tsx +11 -0
  1098. package/materiais/retro-70/texturas/Particulas.tsx +22 -0
  1099. package/materiais/retro-70/tipografia/AssinaturaMarca.tsx +21 -0
  1100. package/materiais/retro-70/tipografia/TituloGordo.tsx +28 -0
  1101. package/materiais/retro-70/transicoes/Cena.tsx +41 -0
  1102. package/materiais/retro-70/transicoes/CorteImpacto.tsx +16 -0
  1103. package/materiais/revista/base.ts +76 -0
  1104. package/materiais/revista/camera/CameraDeriva.tsx +37 -0
  1105. package/materiais/revista/cores/paleta.json +27 -0
  1106. package/materiais/revista/cores/paleta.png +0 -0
  1107. package/materiais/revista/formas/ColagemFotos.tsx +22 -0
  1108. package/materiais/revista/formas/Folio.tsx +19 -0
  1109. package/materiais/revista/formas/FotoSangrando.tsx +24 -0
  1110. package/materiais/revista/formas/PaginaDupla.tsx +36 -0
  1111. package/materiais/revista/pecas.json +506 -0
  1112. package/materiais/revista/referencia/analise.md +80 -0
  1113. package/materiais/revista/referencia/quadro-1.png +0 -0
  1114. package/materiais/revista/referencia/quadro-2.png +0 -0
  1115. package/materiais/revista/referencia/quadro-3.png +0 -0
  1116. package/materiais/revista/referencia/quadro-4.png +0 -0
  1117. package/materiais/revista/referencia/referencia.mp4 +0 -0
  1118. package/materiais/revista/regras.md +130 -0
  1119. package/materiais/revista/sons/Som.tsx +38 -0
  1120. package/materiais/revista/texturas/Fundo.tsx +11 -0
  1121. package/materiais/revista/texturas/Particulas.tsx +22 -0
  1122. package/materiais/revista/tipografia/AssinaturaMarca.tsx +23 -0
  1123. package/materiais/revista/tipografia/CitacaoGrande.tsx +27 -0
  1124. package/materiais/revista/tipografia/TituloEditorial.tsx +31 -0
  1125. package/materiais/revista/transicoes/Cena.tsx +41 -0
  1126. package/materiais/revista/transicoes/CorteImpacto.tsx +16 -0
  1127. package/materiais/risografia/base.ts +73 -0
  1128. package/materiais/risografia/camera/Camera.tsx +21 -0
  1129. package/materiais/risografia/camera/CameraDeriva.tsx +37 -0
  1130. package/materiais/risografia/cores/paleta.json +26 -0
  1131. package/materiais/risografia/cores/paleta.png +0 -0
  1132. package/materiais/risografia/formas/BolaReticula.tsx +26 -0
  1133. package/materiais/risografia/formas/FormaRiso.tsx +24 -0
  1134. package/materiais/risografia/formas/ListaRiso.tsx +22 -0
  1135. package/materiais/risografia/formas/Overlay.tsx +18 -0
  1136. package/materiais/risografia/formas/TarjaCarimbo.tsx +20 -0
  1137. package/materiais/risografia/pecas.json +538 -0
  1138. package/materiais/risografia/referencia/analise.md +82 -0
  1139. package/materiais/risografia/referencia/quadro-1.png +0 -0
  1140. package/materiais/risografia/referencia/quadro-2.png +0 -0
  1141. package/materiais/risografia/referencia/quadro-3.png +0 -0
  1142. package/materiais/risografia/referencia/quadro-4.png +0 -0
  1143. package/materiais/risografia/referencia/referencia.mp4 +0 -0
  1144. package/materiais/risografia/regras.md +123 -0
  1145. package/materiais/risografia/sons/Som.tsx +30 -0
  1146. package/materiais/risografia/texturas/Fundo.tsx +12 -0
  1147. package/materiais/risografia/texturas/Particulas.tsx +22 -0
  1148. package/materiais/risografia/tipografia/AssinaturaMarca.tsx +21 -0
  1149. package/materiais/risografia/tipografia/NumeroRiso.tsx +21 -0
  1150. package/materiais/risografia/tipografia/TituloRiso.tsx +26 -0
  1151. package/materiais/risografia/transicoes/Cena.tsx +36 -0
  1152. package/materiais/risografia/transicoes/CorteImpacto.tsx +16 -0
  1153. package/materiais/saas-linear/camera/CameraDeriva.tsx +37 -0
  1154. package/materiais/saas-linear/cores/paleta.png +0 -0
  1155. package/materiais/saas-linear/pecas.json +40 -34
  1156. package/materiais/saas-linear/referencia/analise.md +87 -0
  1157. package/materiais/saas-linear/referencia/quadro-1.png +0 -0
  1158. package/materiais/saas-linear/referencia/quadro-2.png +0 -0
  1159. package/materiais/saas-linear/referencia/quadro-3.png +0 -0
  1160. package/materiais/saas-linear/referencia/quadro-4.png +0 -0
  1161. package/materiais/saas-linear/referencia/referencia.mp4 +0 -0
  1162. package/materiais/saas-linear/sons/Som.tsx +1 -1
  1163. package/materiais/stripe-ondas/base.ts +85 -0
  1164. package/materiais/stripe-ondas/camera/Camera.tsx +23 -0
  1165. package/materiais/stripe-ondas/camera/CameraDeriva.tsx +37 -0
  1166. package/materiais/stripe-ondas/cores/paleta.json +28 -0
  1167. package/materiais/stripe-ondas/cores/paleta.png +0 -0
  1168. package/materiais/stripe-ondas/formas/CartaoPagamento.tsx +35 -0
  1169. package/materiais/stripe-ondas/formas/FaixaDeOndas.tsx +49 -0
  1170. package/materiais/stripe-ondas/formas/GraficoOnda.tsx +34 -0
  1171. package/materiais/stripe-ondas/formas/PainelCodigo.tsx +36 -0
  1172. package/materiais/stripe-ondas/formas/SelosDeMetodo.tsx +27 -0
  1173. package/materiais/stripe-ondas/pecas.json +510 -0
  1174. package/materiais/stripe-ondas/referencia/analise.md +83 -0
  1175. package/materiais/stripe-ondas/referencia/quadro-1.png +0 -0
  1176. package/materiais/stripe-ondas/referencia/quadro-2.png +0 -0
  1177. package/materiais/stripe-ondas/referencia/quadro-3.png +0 -0
  1178. package/materiais/stripe-ondas/referencia/quadro-4.png +0 -0
  1179. package/materiais/stripe-ondas/referencia/referencia.mp4 +0 -0
  1180. package/materiais/stripe-ondas/regras.md +131 -0
  1181. package/materiais/stripe-ondas/sons/Som.tsx +39 -0
  1182. package/materiais/stripe-ondas/texturas/Fundo.tsx +11 -0
  1183. package/materiais/stripe-ondas/texturas/Particulas.tsx +22 -0
  1184. package/materiais/stripe-ondas/tipografia/AssinaturaMarca.tsx +18 -0
  1185. package/materiais/stripe-ondas/tipografia/TituloLimpo.tsx +27 -0
  1186. package/materiais/stripe-ondas/transicoes/Cena.tsx +46 -0
  1187. package/materiais/stripe-ondas/transicoes/CorteImpacto.tsx +16 -0
  1188. package/materiais/suica/base.ts +76 -0
  1189. package/materiais/suica/camera/CameraDeriva.tsx +37 -0
  1190. package/materiais/suica/cores/paleta.json +27 -0
  1191. package/materiais/suica/cores/paleta.png +0 -0
  1192. package/materiais/suica/formas/DiscoFoto.tsx +20 -0
  1193. package/materiais/suica/formas/Indice.tsx +17 -0
  1194. package/materiais/suica/formas/ListaIndice.tsx +25 -0
  1195. package/materiais/suica/formas/Regua.tsx +20 -0
  1196. package/materiais/suica/pecas.json +528 -0
  1197. package/materiais/suica/referencia/analise.md +80 -0
  1198. package/materiais/suica/referencia/quadro-1.png +0 -0
  1199. package/materiais/suica/referencia/quadro-2.png +0 -0
  1200. package/materiais/suica/referencia/quadro-3.png +0 -0
  1201. package/materiais/suica/referencia/quadro-4.png +0 -0
  1202. package/materiais/suica/referencia/referencia.mp4 +0 -0
  1203. package/materiais/suica/regras.md +129 -0
  1204. package/materiais/suica/sons/Som.tsx +38 -0
  1205. package/materiais/suica/texturas/Fundo.tsx +16 -0
  1206. package/materiais/suica/texturas/GradeFotos.tsx +21 -0
  1207. package/materiais/suica/texturas/Particulas.tsx +22 -0
  1208. package/materiais/suica/tipografia/AssinaturaMarca.tsx +21 -0
  1209. package/materiais/suica/tipografia/NumeroGigante.tsx +21 -0
  1210. package/materiais/suica/tipografia/TituloGrade.tsx +38 -0
  1211. package/materiais/suica/transicoes/Cena.tsx +41 -0
  1212. package/materiais/suica/transicoes/CorteImpacto.tsx +16 -0
  1213. package/materiais/synthwave/base.ts +75 -0
  1214. package/materiais/synthwave/camera/CameraDeriva.tsx +37 -0
  1215. package/materiais/synthwave/cores/paleta.json +29 -0
  1216. package/materiais/synthwave/cores/paleta.png +0 -0
  1217. package/materiais/synthwave/formas/Montanhas.tsx +27 -0
  1218. package/materiais/synthwave/formas/Palmeiras.tsx +30 -0
  1219. package/materiais/synthwave/formas/QuadroHUD.tsx +33 -0
  1220. package/materiais/synthwave/formas/SolListrado.tsx +29 -0
  1221. package/materiais/synthwave/pecas.json +491 -0
  1222. package/materiais/synthwave/referencia/analise.md +81 -0
  1223. package/materiais/synthwave/referencia/quadro-1.png +0 -0
  1224. package/materiais/synthwave/referencia/quadro-2.png +0 -0
  1225. package/materiais/synthwave/referencia/quadro-3.png +0 -0
  1226. package/materiais/synthwave/referencia/quadro-4.png +0 -0
  1227. package/materiais/synthwave/referencia/referencia.mp4 +0 -0
  1228. package/materiais/synthwave/regras.md +132 -0
  1229. package/materiais/synthwave/sons/Som.tsx +38 -0
  1230. package/materiais/synthwave/texturas/Estrelas.tsx +27 -0
  1231. package/materiais/synthwave/texturas/Fundo.tsx +20 -0
  1232. package/materiais/synthwave/texturas/Particulas.tsx +22 -0
  1233. package/materiais/synthwave/tipografia/AssinaturaMarca.tsx +26 -0
  1234. package/materiais/synthwave/tipografia/TituloNeon.tsx +30 -0
  1235. package/materiais/synthwave/transicoes/Cena.tsx +41 -0
  1236. package/materiais/synthwave/transicoes/CorteImpacto.tsx +16 -0
  1237. package/materiais/terminal/base.ts +67 -0
  1238. package/materiais/terminal/camera/Camera.tsx +23 -0
  1239. package/materiais/terminal/camera/CameraDeriva.tsx +37 -0
  1240. package/materiais/terminal/cores/paleta.json +32 -0
  1241. package/materiais/terminal/cores/paleta.png +0 -0
  1242. package/materiais/terminal/formas/ArteAscii.tsx +61 -0
  1243. package/materiais/terminal/formas/BarraProgresso.tsx +42 -0
  1244. package/materiais/terminal/formas/BarraStatus.tsx +18 -0
  1245. package/materiais/terminal/formas/BootBios.tsx +41 -0
  1246. package/materiais/terminal/formas/LinhaComando.tsx +31 -0
  1247. package/materiais/terminal/formas/Monitor.tsx +42 -0
  1248. package/materiais/terminal/formas/PainelCaixa.tsx +35 -0
  1249. package/materiais/terminal/formas/Tela.tsx +25 -0
  1250. package/materiais/terminal/pecas.json +591 -0
  1251. package/materiais/terminal/referencia/analise.md +84 -0
  1252. package/materiais/terminal/referencia/quadro-1.png +0 -0
  1253. package/materiais/terminal/referencia/quadro-2.png +0 -0
  1254. package/materiais/terminal/referencia/quadro-3.png +0 -0
  1255. package/materiais/terminal/referencia/quadro-4.png +0 -0
  1256. package/materiais/terminal/referencia/referencia.mp4 +0 -0
  1257. package/materiais/terminal/regras.md +124 -0
  1258. package/materiais/terminal/sons/Som.tsx +32 -0
  1259. package/materiais/terminal/texturas/Fundo.tsx +22 -0
  1260. package/materiais/terminal/texturas/Particulas.tsx +22 -0
  1261. package/materiais/terminal/tipografia/TextoGrande.tsx +35 -0
  1262. package/materiais/terminal/transicoes/Cena.tsx +25 -0
  1263. package/materiais/terminal/transicoes/CorteImpacto.tsx +16 -0
  1264. package/materiais/tiktok-energia/base.ts +92 -0
  1265. package/materiais/tiktok-energia/camera/CameraDeriva.tsx +37 -0
  1266. package/materiais/tiktok-energia/cores/paleta.json +27 -0
  1267. package/materiais/tiktok-energia/cores/paleta.png +0 -0
  1268. package/materiais/tiktok-energia/formas/EmojiSticker.tsx +21 -0
  1269. package/materiais/tiktok-energia/formas/FotoSoco.tsx +27 -0
  1270. package/materiais/tiktok-energia/pecas.json +470 -0
  1271. package/materiais/tiktok-energia/referencia/analise.md +87 -0
  1272. package/materiais/tiktok-energia/referencia/quadro-1.png +0 -0
  1273. package/materiais/tiktok-energia/referencia/quadro-2.png +0 -0
  1274. package/materiais/tiktok-energia/referencia/quadro-3.png +0 -0
  1275. package/materiais/tiktok-energia/referencia/quadro-4.png +0 -0
  1276. package/materiais/tiktok-energia/referencia/referencia.mp4 +0 -0
  1277. package/materiais/tiktok-energia/regras.md +135 -0
  1278. package/materiais/tiktok-energia/sons/Som.tsx +33 -0
  1279. package/materiais/tiktok-energia/texturas/Fundo.tsx +8 -0
  1280. package/materiais/tiktok-energia/texturas/Particulas.tsx +22 -0
  1281. package/materiais/tiktok-energia/tipografia/AssinaturaMarca.tsx +25 -0
  1282. package/materiais/tiktok-energia/tipografia/PalavraSoco.tsx +29 -0
  1283. package/materiais/tiktok-energia/tipografia/TextoCaixa.tsx +25 -0
  1284. package/materiais/tiktok-energia/transicoes/Cena.tsx +48 -0
  1285. package/materiais/tiktok-energia/transicoes/CorteDeCor.tsx +22 -0
  1286. package/materiais/tiktok-energia/transicoes/CorteImpacto.tsx +16 -0
  1287. package/materiais/tunel/base.ts +97 -0
  1288. package/materiais/tunel/camera/CameraDeriva.tsx +37 -0
  1289. package/materiais/tunel/cores/paleta.json +28 -0
  1290. package/materiais/tunel/cores/paleta.png +0 -0
  1291. package/materiais/tunel/formas/LinhasDeVelocidade.tsx +25 -0
  1292. package/materiais/tunel/formas/PlacaVoadora.tsx +28 -0
  1293. package/materiais/tunel/formas/TunelDeFormas.tsx +52 -0
  1294. package/materiais/tunel/pecas.json +475 -0
  1295. package/materiais/tunel/referencia/analise.md +83 -0
  1296. package/materiais/tunel/referencia/quadro-1.png +0 -0
  1297. package/materiais/tunel/referencia/quadro-2.png +0 -0
  1298. package/materiais/tunel/referencia/quadro-3.png +0 -0
  1299. package/materiais/tunel/referencia/quadro-4.png +0 -0
  1300. package/materiais/tunel/referencia/referencia.mp4 +0 -0
  1301. package/materiais/tunel/regras.md +134 -0
  1302. package/materiais/tunel/sons/Som.tsx +33 -0
  1303. package/materiais/tunel/texturas/Fundo.tsx +13 -0
  1304. package/materiais/tunel/texturas/Particulas.tsx +22 -0
  1305. package/materiais/tunel/tipografia/AssinaturaMarca.tsx +22 -0
  1306. package/materiais/tunel/tipografia/NumeroGigante.tsx +28 -0
  1307. package/materiais/tunel/tipografia/TituloTunel.tsx +32 -0
  1308. package/materiais/tunel/transicoes/Cena.tsx +48 -0
  1309. package/materiais/tunel/transicoes/CorteImpacto.tsx +16 -0
  1310. package/materiais/tutorial-tela/base.ts +65 -0
  1311. package/materiais/tutorial-tela/camera/CameraDeriva.tsx +37 -0
  1312. package/materiais/tutorial-tela/camera/CameraTela.tsx +29 -0
  1313. package/materiais/tutorial-tela/cores/paleta.json +32 -0
  1314. package/materiais/tutorial-tela/cores/paleta.png +0 -0
  1315. package/materiais/tutorial-tela/formas/Cursor.tsx +36 -0
  1316. package/materiais/tutorial-tela/formas/DestaqueCaixa.tsx +17 -0
  1317. package/materiais/tutorial-tela/formas/JanelaApp.tsx +81 -0
  1318. package/materiais/tutorial-tela/formas/TeclaAtalho.tsx +29 -0
  1319. package/materiais/tutorial-tela/pecas.json +526 -0
  1320. package/materiais/tutorial-tela/referencia/analise.md +86 -0
  1321. package/materiais/tutorial-tela/referencia/quadro-1.png +0 -0
  1322. package/materiais/tutorial-tela/referencia/quadro-2.png +0 -0
  1323. package/materiais/tutorial-tela/referencia/quadro-3.png +0 -0
  1324. package/materiais/tutorial-tela/referencia/quadro-4.png +0 -0
  1325. package/materiais/tutorial-tela/referencia/referencia.mp4 +0 -0
  1326. package/materiais/tutorial-tela/regras.md +139 -0
  1327. package/materiais/tutorial-tela/sons/Som.tsx +41 -0
  1328. package/materiais/tutorial-tela/texturas/Fundo.tsx +12 -0
  1329. package/materiais/tutorial-tela/texturas/Particulas.tsx +22 -0
  1330. package/materiais/tutorial-tela/tipografia/PassoChamada.tsx +22 -0
  1331. package/materiais/tutorial-tela/tipografia/TituloTela.tsx +30 -0
  1332. package/materiais/tutorial-tela/transicoes/Cena.tsx +33 -0
  1333. package/materiais/tutorial-tela/transicoes/CorteImpacto.tsx +16 -0
  1334. package/materiais/ugc-reels/base.ts +92 -0
  1335. package/materiais/ugc-reels/camera/CameraDeriva.tsx +37 -0
  1336. package/materiais/ugc-reels/cores/paleta.json +28 -0
  1337. package/materiais/ugc-reels/cores/paleta.png +0 -0
  1338. package/materiais/ugc-reels/formas/BotaoLink.tsx +24 -0
  1339. package/materiais/ugc-reels/formas/CabecalhoPerfil.tsx +38 -0
  1340. package/materiais/ugc-reels/formas/Comentario.tsx +29 -0
  1341. package/materiais/ugc-reels/formas/NotaDeMao.tsx +29 -0
  1342. package/materiais/ugc-reels/formas/Reacoes.tsx +26 -0
  1343. package/materiais/ugc-reels/formas/VideoCelular.tsx +37 -0
  1344. package/materiais/ugc-reels/pecas.json +512 -0
  1345. package/materiais/ugc-reels/referencia/analise.md +85 -0
  1346. package/materiais/ugc-reels/referencia/quadro-1.png +0 -0
  1347. package/materiais/ugc-reels/referencia/quadro-2.png +0 -0
  1348. package/materiais/ugc-reels/referencia/quadro-3.png +0 -0
  1349. package/materiais/ugc-reels/referencia/quadro-4.png +0 -0
  1350. package/materiais/ugc-reels/referencia/referencia.mp4 +0 -0
  1351. package/materiais/ugc-reels/regras.md +138 -0
  1352. package/materiais/ugc-reels/sons/Som.tsx +33 -0
  1353. package/materiais/ugc-reels/texturas/Fundo.tsx +8 -0
  1354. package/materiais/ugc-reels/texturas/Particulas.tsx +22 -0
  1355. package/materiais/ugc-reels/tipografia/AssinaturaMarca.tsx +28 -0
  1356. package/materiais/ugc-reels/tipografia/LegendaEmoji.tsx +43 -0
  1357. package/materiais/ugc-reels/transicoes/Cena.tsx +48 -0
  1358. package/materiais/ugc-reels/transicoes/CorteImpacto.tsx +16 -0
  1359. package/materiais/vercel-mono/base.ts +82 -0
  1360. package/materiais/vercel-mono/camera/Camera.tsx +23 -0
  1361. package/materiais/vercel-mono/camera/CameraDeriva.tsx +37 -0
  1362. package/materiais/vercel-mono/cores/paleta.json +25 -0
  1363. package/materiais/vercel-mono/cores/paleta.png +0 -0
  1364. package/materiais/vercel-mono/formas/FaixaOutline.tsx +25 -0
  1365. package/materiais/vercel-mono/formas/Quadro.tsx +28 -0
  1366. package/materiais/vercel-mono/formas/TerminalComando.tsx +33 -0
  1367. package/materiais/vercel-mono/formas/TrianguloGigante.tsx +27 -0
  1368. package/materiais/vercel-mono/pecas.json +504 -0
  1369. package/materiais/vercel-mono/referencia/analise.md +82 -0
  1370. package/materiais/vercel-mono/referencia/quadro-1.png +0 -0
  1371. package/materiais/vercel-mono/referencia/quadro-2.png +0 -0
  1372. package/materiais/vercel-mono/referencia/quadro-3.png +0 -0
  1373. package/materiais/vercel-mono/referencia/quadro-4.png +0 -0
  1374. package/materiais/vercel-mono/referencia/referencia.mp4 +0 -0
  1375. package/materiais/vercel-mono/regras.md +120 -0
  1376. package/materiais/vercel-mono/sons/Som.tsx +39 -0
  1377. package/materiais/vercel-mono/texturas/Fundo.tsx +6 -0
  1378. package/materiais/vercel-mono/texturas/GradeDeNumeros.tsx +27 -0
  1379. package/materiais/vercel-mono/texturas/Particulas.tsx +22 -0
  1380. package/materiais/vercel-mono/tipografia/AssinaturaMarca.tsx +18 -0
  1381. package/materiais/vercel-mono/tipografia/PalavraMono.tsx +31 -0
  1382. package/materiais/vercel-mono/transicoes/Cena.tsx +46 -0
  1383. package/materiais/vercel-mono/transicoes/CorteImpacto.tsx +16 -0
  1384. package/materiais/vhs-90/base.ts +75 -0
  1385. package/materiais/vhs-90/camera/CameraDeriva.tsx +37 -0
  1386. package/materiais/vhs-90/cores/paleta.json +29 -0
  1387. package/materiais/vhs-90/cores/paleta.png +0 -0
  1388. package/materiais/vhs-90/formas/BarrasRastreio.tsx +21 -0
  1389. package/materiais/vhs-90/formas/CapaVHS.tsx +28 -0
  1390. package/materiais/vhs-90/formas/CarimboData.tsx +19 -0
  1391. package/materiais/vhs-90/formas/MenuOSD.tsx +27 -0
  1392. package/materiais/vhs-90/formas/TelaAzul.tsx +29 -0
  1393. package/materiais/vhs-90/pecas.json +507 -0
  1394. package/materiais/vhs-90/referencia/analise.md +81 -0
  1395. package/materiais/vhs-90/referencia/quadro-1.png +0 -0
  1396. package/materiais/vhs-90/referencia/quadro-2.png +0 -0
  1397. package/materiais/vhs-90/referencia/quadro-3.png +0 -0
  1398. package/materiais/vhs-90/referencia/quadro-4.png +0 -0
  1399. package/materiais/vhs-90/referencia/referencia.mp4 +0 -0
  1400. package/materiais/vhs-90/regras.md +133 -0
  1401. package/materiais/vhs-90/sons/Som.tsx +38 -0
  1402. package/materiais/vhs-90/texturas/Fundo.tsx +27 -0
  1403. package/materiais/vhs-90/texturas/Particulas.tsx +22 -0
  1404. package/materiais/vhs-90/tipografia/AssinaturaMarca.tsx +29 -0
  1405. package/materiais/vhs-90/tipografia/TituloFita.tsx +40 -0
  1406. package/materiais/vhs-90/transicoes/Cena.tsx +41 -0
  1407. package/materiais/vhs-90/transicoes/CorteImpacto.tsx +16 -0
  1408. package/materiais/vidro-ios/base.ts +87 -0
  1409. package/materiais/vidro-ios/camera/Camera.tsx +23 -0
  1410. package/materiais/vidro-ios/camera/CameraDeriva.tsx +37 -0
  1411. package/materiais/vidro-ios/cores/paleta.json +28 -0
  1412. package/materiais/vidro-ios/cores/paleta.png +0 -0
  1413. package/materiais/vidro-ios/formas/IlhaDinamica.tsx +24 -0
  1414. package/materiais/vidro-ios/formas/PainelControle.tsx +33 -0
  1415. package/materiais/vidro-ios/formas/PilhaNotificacoes.tsx +29 -0
  1416. package/materiais/vidro-ios/formas/WidgetsGrade.tsx +34 -0
  1417. package/materiais/vidro-ios/formas/vidro.tsx +20 -0
  1418. package/materiais/vidro-ios/pecas.json +504 -0
  1419. package/materiais/vidro-ios/referencia/analise.md +84 -0
  1420. package/materiais/vidro-ios/referencia/quadro-1.png +0 -0
  1421. package/materiais/vidro-ios/referencia/quadro-2.png +0 -0
  1422. package/materiais/vidro-ios/referencia/quadro-3.png +0 -0
  1423. package/materiais/vidro-ios/referencia/quadro-4.png +0 -0
  1424. package/materiais/vidro-ios/referencia/referencia.mp4 +0 -0
  1425. package/materiais/vidro-ios/regras.md +127 -0
  1426. package/materiais/vidro-ios/sons/Som.tsx +39 -0
  1427. package/materiais/vidro-ios/texturas/Fundo.tsx +17 -0
  1428. package/materiais/vidro-ios/texturas/Particulas.tsx +22 -0
  1429. package/materiais/vidro-ios/tipografia/AssinaturaMarca.tsx +21 -0
  1430. package/materiais/vidro-ios/tipografia/TituloVidro.tsx +22 -0
  1431. package/materiais/vidro-ios/transicoes/Cena.tsx +46 -0
  1432. package/materiais/vidro-ios/transicoes/CorteImpacto.tsx +16 -0
  1433. package/materiais/y2k-cromado/base.ts +75 -0
  1434. package/materiais/y2k-cromado/camera/CameraDeriva.tsx +37 -0
  1435. package/materiais/y2k-cromado/cores/paleta.json +29 -0
  1436. package/materiais/y2k-cromado/cores/paleta.png +0 -0
  1437. package/materiais/y2k-cromado/formas/Bolhas.tsx +30 -0
  1438. package/materiais/y2k-cromado/formas/CartaoGloss.tsx +26 -0
  1439. package/materiais/y2k-cromado/formas/FitaMarquee.tsx +20 -0
  1440. package/materiais/y2k-cromado/formas/JanelaY2K.tsx +31 -0
  1441. package/materiais/y2k-cromado/formas/OrbeCromo.tsx +20 -0
  1442. package/materiais/y2k-cromado/pecas.json +527 -0
  1443. package/materiais/y2k-cromado/referencia/analise.md +81 -0
  1444. package/materiais/y2k-cromado/referencia/quadro-1.png +0 -0
  1445. package/materiais/y2k-cromado/referencia/quadro-2.png +0 -0
  1446. package/materiais/y2k-cromado/referencia/quadro-3.png +0 -0
  1447. package/materiais/y2k-cromado/referencia/quadro-4.png +0 -0
  1448. package/materiais/y2k-cromado/referencia/referencia.mp4 +0 -0
  1449. package/materiais/y2k-cromado/regras.md +133 -0
  1450. package/materiais/y2k-cromado/sons/Som.tsx +38 -0
  1451. package/materiais/y2k-cromado/texturas/Brilhos.tsx +28 -0
  1452. package/materiais/y2k-cromado/texturas/Fundo.tsx +18 -0
  1453. package/materiais/y2k-cromado/texturas/Particulas.tsx +22 -0
  1454. package/materiais/y2k-cromado/tipografia/AssinaturaMarca.tsx +25 -0
  1455. package/materiais/y2k-cromado/tipografia/TextoCromo.tsx +34 -0
  1456. package/materiais/y2k-cromado/transicoes/Cena.tsx +41 -0
  1457. package/materiais/y2k-cromado/transicoes/CorteImpacto.tsx +16 -0
  1458. package/package.json +6 -2
  1459. package/skills/apresentacao-pptx/SKILL.md +1 -1
  1460. package/skills/carrossel-conferido/SKILL.md +21 -0
  1461. package/skills/cartaz-conferido/SKILL.md +28 -0
  1462. package/skills/deck-conferido/SKILL.md +5 -4
  1463. package/skills/documento-conferido/SKILL.md +23 -0
  1464. package/vendor/fontes/anton.woff2 +0 -0
  1465. package/vendor/fontes/caveat.woff2 +0 -0
  1466. package/vendor/fontes/inter.woff2 +0 -0
  1467. package/vendor/fontes/jetbrains-mono.woff2 +0 -0
  1468. package/vendor/fontes/montserrat.woff2 +0 -0
  1469. package/voz/primo_voz/__main__.py +1 -1
  1470. package/voz/primo_voz/app.py +8 -8
  1471. package/voz/primo_voz/transcrever.py +2 -2
  1472. package/kits/adesivos/assets/ASSETS.md +0 -22
  1473. package/kits/adesivos/elementos/AdesivoForma.tsx +0 -42
  1474. package/kits/adesivos/elementos/AdesivoFoto.tsx +0 -36
  1475. package/kits/adesivos/elementos/AdesivoTexto.tsx +0 -35
  1476. package/kits/adesivos/elementos/AssinaturaMarca.tsx +0 -36
  1477. package/kits/adesivos/elementos/Cena.tsx +0 -48
  1478. package/kits/adesivos/elementos/ChuvaDeAdesivos.tsx +0 -29
  1479. package/kits/adesivos/elementos/Fundo.tsx +0 -21
  1480. package/kits/adesivos/elementos/Montagem.tsx +0 -68
  1481. package/kits/adesivos/elementos/SeloPreco.tsx +0 -38
  1482. package/kits/adesivos/elementos/Som.tsx +0 -33
  1483. package/kits/adesivos/elementos/TituloEtiquetas.tsx +0 -33
  1484. package/kits/adesivos/elementos/base.ts +0 -101
  1485. package/kits/adesivos/elementos/index.ts +0 -16
  1486. package/kits/adesivos/exemplos/fotos/foto-01.jpg +0 -0
  1487. package/kits/adesivos/exemplos/fotos/foto-02.jpg +0 -0
  1488. package/kits/adesivos/exemplos/fotos/foto-03.jpg +0 -0
  1489. package/kits/adesivos/exemplos/logo-grude.svg +0 -1
  1490. package/kits/adesivos/exemplos/plano.json +0 -328
  1491. package/kits/adesivos/exemplos/roteiro.md +0 -21
  1492. package/kits/adesivos/preview.tsx +0 -15
  1493. package/kits/adesivos/receita.json +0 -212
  1494. package/kits/adesivos/regras/area-segura.md +0 -17
  1495. package/kits/adesivos/regras/cor.md +0 -23
  1496. package/kits/adesivos/regras/movimento.md +0 -17
  1497. package/kits/adesivos/regras/ritmo.md +0 -16
  1498. package/kits/adesivos/regras/som.md +0 -20
  1499. package/kits/adesivos/regras/tipografia.md +0 -16
  1500. package/kits/antes-depois/assets/ASSETS.md +0 -23
  1501. package/kits/antes-depois/elementos/BarraMedidor.tsx +0 -43
  1502. package/kits/antes-depois/elementos/Cena.tsx +0 -41
  1503. package/kits/antes-depois/elementos/FaixaMarquee.tsx +0 -35
  1504. package/kits/antes-depois/elementos/Fundo.tsx +0 -24
  1505. package/kits/antes-depois/elementos/ListaMudancas.tsx +0 -37
  1506. package/kits/antes-depois/elementos/Montagem.tsx +0 -59
  1507. package/kits/antes-depois/elementos/NumeroDelta.tsx +0 -36
  1508. package/kits/antes-depois/elementos/RotuloAntesDepois.tsx +0 -26
  1509. package/kits/antes-depois/elementos/Som.tsx +0 -40
  1510. package/kits/antes-depois/elementos/TelaDividida.tsx +0 -68
  1511. package/kits/antes-depois/elementos/base.ts +0 -82
  1512. package/kits/antes-depois/elementos/index.ts +0 -15
  1513. package/kits/antes-depois/exemplos/fotos/foto-07.jpg +0 -0
  1514. package/kits/antes-depois/exemplos/fotos/foto-08.jpg +0 -0
  1515. package/kits/antes-depois/exemplos/plano.json +0 -276
  1516. package/kits/antes-depois/exemplos/roteiro.md +0 -19
  1517. package/kits/antes-depois/preview.tsx +0 -13
  1518. package/kits/antes-depois/receita.json +0 -21
  1519. package/kits/antes-depois/regras/area-segura.md +0 -21
  1520. package/kits/antes-depois/regras/cor.md +0 -15
  1521. package/kits/antes-depois/regras/movimento.md +0 -23
  1522. package/kits/antes-depois/regras/ritmo.md +0 -15
  1523. package/kits/antes-depois/regras/som.md +0 -20
  1524. package/kits/antes-depois/regras/tipografia.md +0 -18
  1525. package/kits/apple-tipografico/assets/ASSETS.md +0 -23
  1526. package/kits/apple-tipografico/elementos/AssinaturaPreta.tsx +0 -33
  1527. package/kits/apple-tipografico/elementos/Camera.tsx +0 -23
  1528. package/kits/apple-tipografico/elementos/CartaoRadial.tsx +0 -41
  1529. package/kits/apple-tipografico/elementos/Cena.tsx +0 -55
  1530. package/kits/apple-tipografico/elementos/Fundo.tsx +0 -21
  1531. package/kits/apple-tipografico/elementos/LegendaCurta.tsx +0 -51
  1532. package/kits/apple-tipografico/elementos/Montagem.tsx +0 -55
  1533. package/kits/apple-tipografico/elementos/Produto3D.tsx +0 -140
  1534. package/kits/apple-tipografico/elementos/ProdutoFoto.tsx +0 -47
  1535. package/kits/apple-tipografico/elementos/Som.tsx +0 -40
  1536. package/kits/apple-tipografico/elementos/base.ts +0 -111
  1537. package/kits/apple-tipografico/elementos/index.ts +0 -18
  1538. package/kits/apple-tipografico/exemplos/logo-lume.svg +0 -1
  1539. package/kits/apple-tipografico/exemplos/plano.json +0 -56
  1540. package/kits/apple-tipografico/exemplos/roteiro.md +0 -19
  1541. package/kits/apple-tipografico/preview.tsx +0 -12
  1542. package/kits/apple-tipografico/receita.json +0 -22
  1543. package/kits/apple-tipografico/regras/area-segura.md +0 -19
  1544. package/kits/apple-tipografico/regras/cor.md +0 -24
  1545. package/kits/apple-tipografico/regras/movimento.md +0 -29
  1546. package/kits/apple-tipografico/regras/ritmo.md +0 -29
  1547. package/kits/apple-tipografico/regras/som.md +0 -20
  1548. package/kits/apple-tipografico/regras/tipografia.md +0 -21
  1549. package/kits/aquarela/assets/ASSETS.md +0 -21
  1550. package/kits/aquarela/elementos/AnotacaoManual.tsx +0 -40
  1551. package/kits/aquarela/elementos/AssinaturaMarca.tsx +0 -33
  1552. package/kits/aquarela/elementos/Cena.tsx +0 -48
  1553. package/kits/aquarela/elementos/Fundo.tsx +0 -24
  1554. package/kits/aquarela/elementos/ManchaTinta.tsx +0 -46
  1555. package/kits/aquarela/elementos/Montagem.tsx +0 -60
  1556. package/kits/aquarela/elementos/PapelRasgado.tsx +0 -50
  1557. package/kits/aquarela/elementos/Pincelada.tsx +0 -43
  1558. package/kits/aquarela/elementos/Pingos.tsx +0 -31
  1559. package/kits/aquarela/elementos/Som.tsx +0 -33
  1560. package/kits/aquarela/elementos/TituloPincel.tsx +0 -51
  1561. package/kits/aquarela/elementos/base.ts +0 -97
  1562. package/kits/aquarela/elementos/index.ts +0 -16
  1563. package/kits/aquarela/exemplos/logo-mare.svg +0 -1
  1564. package/kits/aquarela/exemplos/plano.json +0 -62
  1565. package/kits/aquarela/exemplos/roteiro.md +0 -21
  1566. package/kits/aquarela/preview.tsx +0 -12
  1567. package/kits/aquarela/receita.json +0 -213
  1568. package/kits/aquarela/regras/area-segura.md +0 -17
  1569. package/kits/aquarela/regras/cor.md +0 -23
  1570. package/kits/aquarela/regras/movimento.md +0 -19
  1571. package/kits/aquarela/regras/ritmo.md +0 -17
  1572. package/kits/aquarela/regras/som.md +0 -20
  1573. package/kits/aquarela/regras/tipografia.md +0 -16
  1574. package/kits/aurora/assets/ASSETS.md +0 -21
  1575. package/kits/aurora/elementos/AssinaturaMarca.tsx +0 -24
  1576. package/kits/aurora/elementos/CartaoVidro.tsx +0 -29
  1577. package/kits/aurora/elementos/Cena.tsx +0 -48
  1578. package/kits/aurora/elementos/CeuEstrelado.tsx +0 -22
  1579. package/kits/aurora/elementos/CortinaDeLuz.tsx +0 -36
  1580. package/kits/aurora/elementos/Fundo.tsx +0 -35
  1581. package/kits/aurora/elementos/Legenda.tsx +0 -23
  1582. package/kits/aurora/elementos/Montagem.tsx +0 -68
  1583. package/kits/aurora/elementos/Montanhas.tsx +0 -24
  1584. package/kits/aurora/elementos/Som.tsx +0 -33
  1585. package/kits/aurora/elementos/TituloSerif.tsx +0 -36
  1586. package/kits/aurora/elementos/base.ts +0 -93
  1587. package/kits/aurora/elementos/index.ts +0 -16
  1588. package/kits/aurora/exemplos/logo-boreal.svg +0 -1
  1589. package/kits/aurora/exemplos/plano.json +0 -204
  1590. package/kits/aurora/exemplos/roteiro.md +0 -19
  1591. package/kits/aurora/preview.tsx +0 -12
  1592. package/kits/aurora/receita.json +0 -146
  1593. package/kits/aurora/regras/area-segura.md +0 -18
  1594. package/kits/aurora/regras/cor.md +0 -24
  1595. package/kits/aurora/regras/movimento.md +0 -20
  1596. package/kits/aurora/regras/ritmo.md +0 -14
  1597. package/kits/aurora/regras/som.md +0 -20
  1598. package/kits/aurora/regras/tipografia.md +0 -15
  1599. package/kits/bauhaus/assets/ASSETS.md +0 -18
  1600. package/kits/bauhaus/elementos/AssinaturaMarca.tsx +0 -26
  1601. package/kits/bauhaus/elementos/BarraDiagonal.tsx +0 -20
  1602. package/kits/bauhaus/elementos/Camera.tsx +0 -21
  1603. package/kits/bauhaus/elementos/Cena.tsx +0 -36
  1604. package/kits/bauhaus/elementos/ComposicaoGeometrica.tsx +0 -54
  1605. package/kits/bauhaus/elementos/Fundo.tsx +0 -13
  1606. package/kits/bauhaus/elementos/ListaFaixas.tsx +0 -27
  1607. package/kits/bauhaus/elementos/Montagem.tsx +0 -55
  1608. package/kits/bauhaus/elementos/NumeroBauhaus.tsx +0 -21
  1609. package/kits/bauhaus/elementos/Overlay.tsx +0 -18
  1610. package/kits/bauhaus/elementos/Som.tsx +0 -30
  1611. package/kits/bauhaus/elementos/TituloBauhaus.tsx +0 -32
  1612. package/kits/bauhaus/elementos/base.ts +0 -74
  1613. package/kits/bauhaus/elementos/index.ts +0 -16
  1614. package/kits/bauhaus/exemplos/plano.json +0 -221
  1615. package/kits/bauhaus/exemplos/roteiro.md +0 -20
  1616. package/kits/bauhaus/preview.tsx +0 -12
  1617. package/kits/bauhaus/receita.json +0 -174
  1618. package/kits/bauhaus/regras/area-segura.md +0 -15
  1619. package/kits/bauhaus/regras/cor.md +0 -13
  1620. package/kits/bauhaus/regras/movimento.md +0 -17
  1621. package/kits/bauhaus/regras/ritmo.md +0 -15
  1622. package/kits/bauhaus/regras/som.md +0 -18
  1623. package/kits/bauhaus/regras/tipografia.md +0 -20
  1624. package/kits/brutalista/assets/ASSETS.md +0 -23
  1625. package/kits/brutalista/elementos/AssinaturaMarca.tsx +0 -21
  1626. package/kits/brutalista/elementos/BlocoSombra.tsx +0 -18
  1627. package/kits/brutalista/elementos/CartaoFotoBruto.tsx +0 -19
  1628. package/kits/brutalista/elementos/Cena.tsx +0 -41
  1629. package/kits/brutalista/elementos/ContadorGrande.tsx +0 -21
  1630. package/kits/brutalista/elementos/FitaAlerta.tsx +0 -20
  1631. package/kits/brutalista/elementos/Fundo.tsx +0 -9
  1632. package/kits/brutalista/elementos/ListaBruta.tsx +0 -23
  1633. package/kits/brutalista/elementos/MonoEnorme.tsx +0 -43
  1634. package/kits/brutalista/elementos/Montagem.tsx +0 -62
  1635. package/kits/brutalista/elementos/QuadroCor.tsx +0 -14
  1636. package/kits/brutalista/elementos/Som.tsx +0 -38
  1637. package/kits/brutalista/elementos/Terminal.tsx +0 -25
  1638. package/kits/brutalista/elementos/base.ts +0 -71
  1639. package/kits/brutalista/elementos/index.ts +0 -18
  1640. package/kits/brutalista/exemplos/fotos/foto-02.jpg +0 -0
  1641. package/kits/brutalista/exemplos/fotos/foto-03.jpg +0 -0
  1642. package/kits/brutalista/exemplos/fotos/foto-05.jpg +0 -0
  1643. package/kits/brutalista/exemplos/fotos/foto-07.jpg +0 -0
  1644. package/kits/brutalista/exemplos/fotos/foto-08.jpg +0 -0
  1645. package/kits/brutalista/exemplos/logo-bloco.svg +0 -1
  1646. package/kits/brutalista/exemplos/plano.json +0 -52
  1647. package/kits/brutalista/exemplos/roteiro.md +0 -19
  1648. package/kits/brutalista/preview.tsx +0 -20
  1649. package/kits/brutalista/receita.json +0 -195
  1650. package/kits/brutalista/regras/area-segura.md +0 -18
  1651. package/kits/brutalista/regras/cor.md +0 -12
  1652. package/kits/brutalista/regras/movimento.md +0 -16
  1653. package/kits/brutalista/regras/ritmo.md +0 -16
  1654. package/kits/brutalista/regras/som.md +0 -21
  1655. package/kits/brutalista/regras/tipografia.md +0 -16
  1656. package/kits/campos-de-cor/assets/ASSETS.md +0 -19
  1657. package/kits/campos-de-cor/elementos/AssinaturaMarca.tsx +0 -18
  1658. package/kits/campos-de-cor/elementos/Asterisco.tsx +0 -26
  1659. package/kits/campos-de-cor/elementos/Camera.tsx +0 -23
  1660. package/kits/campos-de-cor/elementos/CampoDeCor.tsx +0 -39
  1661. package/kits/campos-de-cor/elementos/Cena.tsx +0 -46
  1662. package/kits/campos-de-cor/elementos/FitaDeTexto.tsx +0 -24
  1663. package/kits/campos-de-cor/elementos/FormaGeometrica.tsx +0 -37
  1664. package/kits/campos-de-cor/elementos/Fundo.tsx +0 -11
  1665. package/kits/campos-de-cor/elementos/LegendaItalica.tsx +0 -12
  1666. package/kits/campos-de-cor/elementos/ListaRegua.tsx +0 -30
  1667. package/kits/campos-de-cor/elementos/Montagem.tsx +0 -62
  1668. package/kits/campos-de-cor/elementos/PalavraGigante.tsx +0 -44
  1669. package/kits/campos-de-cor/elementos/Som.tsx +0 -39
  1670. package/kits/campos-de-cor/elementos/base.ts +0 -87
  1671. package/kits/campos-de-cor/elementos/index.ts +0 -17
  1672. package/kits/campos-de-cor/exemplos/logo-pulso.svg +0 -1
  1673. package/kits/campos-de-cor/exemplos/plano.json +0 -258
  1674. package/kits/campos-de-cor/exemplos/roteiro.md +0 -19
  1675. package/kits/campos-de-cor/preview.tsx +0 -12
  1676. package/kits/campos-de-cor/receita.json +0 -174
  1677. package/kits/campos-de-cor/regras/area-segura.md +0 -15
  1678. package/kits/campos-de-cor/regras/cor.md +0 -14
  1679. package/kits/campos-de-cor/regras/movimento.md +0 -15
  1680. package/kits/campos-de-cor/regras/ritmo.md +0 -15
  1681. package/kits/campos-de-cor/regras/som.md +0 -18
  1682. package/kits/campos-de-cor/regras/tipografia.md +0 -13
  1683. package/kits/cartaz-cinetico/assets/ASSETS.md +0 -22
  1684. package/kits/cartaz-cinetico/elementos/AssinaturaMarca.tsx +0 -31
  1685. package/kits/cartaz-cinetico/elementos/CartazPalavra.tsx +0 -40
  1686. package/kits/cartaz-cinetico/elementos/Cena.tsx +0 -41
  1687. package/kits/cartaz-cinetico/elementos/CirculoPoster.tsx +0 -22
  1688. package/kits/cartaz-cinetico/elementos/EcoPalavra.tsx +0 -27
  1689. package/kits/cartaz-cinetico/elementos/Fundo.tsx +0 -16
  1690. package/kits/cartaz-cinetico/elementos/Montagem.tsx +0 -59
  1691. package/kits/cartaz-cinetico/elementos/PilhaCartaz.tsx +0 -40
  1692. package/kits/cartaz-cinetico/elementos/RoletaPalavras.tsx +0 -30
  1693. package/kits/cartaz-cinetico/elementos/Selo.tsx +0 -25
  1694. package/kits/cartaz-cinetico/elementos/Som.tsx +0 -38
  1695. package/kits/cartaz-cinetico/elementos/base.ts +0 -72
  1696. package/kits/cartaz-cinetico/elementos/index.ts +0 -16
  1697. package/kits/cartaz-cinetico/exemplos/logo-feira.svg +0 -1
  1698. package/kits/cartaz-cinetico/exemplos/plano.json +0 -55
  1699. package/kits/cartaz-cinetico/exemplos/roteiro.md +0 -20
  1700. package/kits/cartaz-cinetico/preview.tsx +0 -16
  1701. package/kits/cartaz-cinetico/receita.json +0 -209
  1702. package/kits/cartaz-cinetico/regras/area-segura.md +0 -19
  1703. package/kits/cartaz-cinetico/regras/cor.md +0 -13
  1704. package/kits/cartaz-cinetico/regras/movimento.md +0 -16
  1705. package/kits/cartaz-cinetico/regras/ritmo.md +0 -17
  1706. package/kits/cartaz-cinetico/regras/som.md +0 -21
  1707. package/kits/cartaz-cinetico/regras/tipografia.md +0 -16
  1708. package/kits/colagem/assets/ASSETS.md +0 -25
  1709. package/kits/colagem/elementos/AssinaturaMarca.tsx +0 -17
  1710. package/kits/colagem/elementos/Camera.tsx +0 -21
  1711. package/kits/colagem/elementos/Cena.tsx +0 -36
  1712. package/kits/colagem/elementos/FitaAdesiva.tsx +0 -11
  1713. package/kits/colagem/elementos/FotoRasgada.tsx +0 -26
  1714. package/kits/colagem/elementos/Fundo.tsx +0 -16
  1715. package/kits/colagem/elementos/ListaRecortes.tsx +0 -23
  1716. package/kits/colagem/elementos/Montagem.tsx +0 -56
  1717. package/kits/colagem/elementos/NotaDatilografada.tsx +0 -35
  1718. package/kits/colagem/elementos/RecorteForma.tsx +0 -23
  1719. package/kits/colagem/elementos/Som.tsx +0 -30
  1720. package/kits/colagem/elementos/TituloRecorte.tsx +0 -34
  1721. package/kits/colagem/elementos/base.ts +0 -77
  1722. package/kits/colagem/elementos/index.ts +0 -17
  1723. package/kits/colagem/elementos/rasgado.ts +0 -16
  1724. package/kits/colagem/exemplos/fotos/foto-01.jpg +0 -0
  1725. package/kits/colagem/exemplos/fotos/foto-02.jpg +0 -0
  1726. package/kits/colagem/exemplos/plano.json +0 -228
  1727. package/kits/colagem/exemplos/roteiro.md +0 -20
  1728. package/kits/colagem/preview.tsx +0 -13
  1729. package/kits/colagem/receita.json +0 -171
  1730. package/kits/colagem/regras/area-segura.md +0 -15
  1731. package/kits/colagem/regras/cor.md +0 -16
  1732. package/kits/colagem/regras/movimento.md +0 -18
  1733. package/kits/colagem/regras/ritmo.md +0 -15
  1734. package/kits/colagem/regras/som.md +0 -18
  1735. package/kits/colagem/regras/tipografia.md +0 -18
  1736. package/kits/contagem/assets/ASSETS.md +0 -20
  1737. package/kits/contagem/elementos/AnelTempo.tsx +0 -36
  1738. package/kits/contagem/elementos/BarraDias.tsx +0 -41
  1739. package/kits/contagem/elementos/CarimboData.tsx +0 -37
  1740. package/kits/contagem/elementos/Cena.tsx +0 -39
  1741. package/kits/contagem/elementos/Fundo.tsx +0 -27
  1742. package/kits/contagem/elementos/Montagem.tsx +0 -58
  1743. package/kits/contagem/elementos/NumeroRolando.tsx +0 -49
  1744. package/kits/contagem/elementos/RelogioFlip.tsx +0 -51
  1745. package/kits/contagem/elementos/Som.tsx +0 -41
  1746. package/kits/contagem/elementos/base.ts +0 -79
  1747. package/kits/contagem/elementos/index.ts +0 -14
  1748. package/kits/contagem/exemplos/plano.json +0 -48
  1749. package/kits/contagem/exemplos/roteiro.md +0 -19
  1750. package/kits/contagem/preview.tsx +0 -9
  1751. package/kits/contagem/receita.json +0 -21
  1752. package/kits/contagem/regras/area-segura.md +0 -16
  1753. package/kits/contagem/regras/cor.md +0 -14
  1754. package/kits/contagem/regras/movimento.md +0 -23
  1755. package/kits/contagem/regras/ritmo.md +0 -15
  1756. package/kits/contagem/regras/som.md +0 -21
  1757. package/kits/contagem/regras/tipografia.md +0 -16
  1758. package/kits/convite-evento/assets/ASSETS.md +0 -19
  1759. package/kits/convite-evento/elementos/BotaoInscricao.tsx +0 -36
  1760. package/kits/convite-evento/elementos/Cena.tsx +0 -39
  1761. package/kits/convite-evento/elementos/DataGigante.tsx +0 -37
  1762. package/kits/convite-evento/elementos/Fundo.tsx +0 -30
  1763. package/kits/convite-evento/elementos/IngressoBilhete.tsx +0 -40
  1764. package/kits/convite-evento/elementos/LugarGigante.tsx +0 -38
  1765. package/kits/convite-evento/elementos/Montagem.tsx +0 -59
  1766. package/kits/convite-evento/elementos/SeloRotativo.tsx +0 -32
  1767. package/kits/convite-evento/elementos/Som.tsx +0 -40
  1768. package/kits/convite-evento/elementos/TituloEvento.tsx +0 -33
  1769. package/kits/convite-evento/elementos/base.ts +0 -82
  1770. package/kits/convite-evento/elementos/index.ts +0 -15
  1771. package/kits/convite-evento/exemplos/plano.json +0 -49
  1772. package/kits/convite-evento/exemplos/roteiro.md +0 -19
  1773. package/kits/convite-evento/preview.tsx +0 -9
  1774. package/kits/convite-evento/receita.json +0 -21
  1775. package/kits/convite-evento/regras/area-segura.md +0 -20
  1776. package/kits/convite-evento/regras/cor.md +0 -13
  1777. package/kits/convite-evento/regras/movimento.md +0 -20
  1778. package/kits/convite-evento/regras/ritmo.md +0 -15
  1779. package/kits/convite-evento/regras/som.md +0 -20
  1780. package/kits/convite-evento/regras/tipografia.md +0 -18
  1781. package/kits/corte-podcast/assets/ASSETS.md +0 -19
  1782. package/kits/corte-podcast/elementos/BarraEpisodio.tsx +0 -43
  1783. package/kits/corte-podcast/elementos/CartaoConvidado.tsx +0 -32
  1784. package/kits/corte-podcast/elementos/Cena.tsx +0 -41
  1785. package/kits/corte-podcast/elementos/CitacaoGrande.tsx +0 -42
  1786. package/kits/corte-podcast/elementos/Fundo.tsx +0 -27
  1787. package/kits/corte-podcast/elementos/LegendaKaraoke.tsx +0 -32
  1788. package/kits/corte-podcast/elementos/Montagem.tsx +0 -59
  1789. package/kits/corte-podcast/elementos/OndaAudio.tsx +0 -41
  1790. package/kits/corte-podcast/elementos/SeloEpisodio.tsx +0 -33
  1791. package/kits/corte-podcast/elementos/Som.tsx +0 -40
  1792. package/kits/corte-podcast/elementos/base.ts +0 -82
  1793. package/kits/corte-podcast/elementos/index.ts +0 -15
  1794. package/kits/corte-podcast/exemplos/plano.json +0 -62
  1795. package/kits/corte-podcast/exemplos/roteiro.md +0 -20
  1796. package/kits/corte-podcast/preview.tsx +0 -9
  1797. package/kits/corte-podcast/receita.json +0 -21
  1798. package/kits/corte-podcast/regras/area-segura.md +0 -18
  1799. package/kits/corte-podcast/regras/cor.md +0 -15
  1800. package/kits/corte-podcast/regras/movimento.md +0 -18
  1801. package/kits/corte-podcast/regras/ritmo.md +0 -16
  1802. package/kits/corte-podcast/regras/som.md +0 -20
  1803. package/kits/corte-podcast/regras/tipografia.md +0 -16
  1804. package/kits/cubos/assets/ASSETS.md +0 -21
  1805. package/kits/cubos/elementos/AssinaturaMarca.tsx +0 -29
  1806. package/kits/cubos/elementos/Cena.tsx +0 -48
  1807. package/kits/cubos/elementos/Cubo.tsx +0 -40
  1808. package/kits/cubos/elementos/CuboGiratorio.tsx +0 -37
  1809. package/kits/cubos/elementos/Fundo.tsx +0 -15
  1810. package/kits/cubos/elementos/Montagem.tsx +0 -67
  1811. package/kits/cubos/elementos/MontagemDeCubos.tsx +0 -58
  1812. package/kits/cubos/elementos/PlacaBloco.tsx +0 -29
  1813. package/kits/cubos/elementos/Som.tsx +0 -33
  1814. package/kits/cubos/elementos/TorreDeCubos.tsx +0 -39
  1815. package/kits/cubos/elementos/base.ts +0 -97
  1816. package/kits/cubos/elementos/index.ts +0 -15
  1817. package/kits/cubos/exemplos/logo-encaixa.svg +0 -1
  1818. package/kits/cubos/exemplos/plano.json +0 -45
  1819. package/kits/cubos/exemplos/roteiro.md +0 -20
  1820. package/kits/cubos/preview.tsx +0 -12
  1821. package/kits/cubos/receita.json +0 -151
  1822. package/kits/cubos/regras/area-segura.md +0 -18
  1823. package/kits/cubos/regras/cor.md +0 -23
  1824. package/kits/cubos/regras/movimento.md +0 -17
  1825. package/kits/cubos/regras/ritmo.md +0 -14
  1826. package/kits/cubos/regras/som.md +0 -20
  1827. package/kits/cubos/regras/tipografia.md +0 -15
  1828. package/kits/dashboard-dados/assets/ASSETS.md +0 -18
  1829. package/kits/dashboard-dados/elementos/AssinaturaMarca.tsx +0 -19
  1830. package/kits/dashboard-dados/elementos/BarrasCrescendo.tsx +0 -27
  1831. package/kits/dashboard-dados/elementos/Camera.tsx +0 -23
  1832. package/kits/dashboard-dados/elementos/Cena.tsx +0 -46
  1833. package/kits/dashboard-dados/elementos/Fundo.tsx +0 -12
  1834. package/kits/dashboard-dados/elementos/LinhaTendencia.tsx +0 -29
  1835. package/kits/dashboard-dados/elementos/Montagem.tsx +0 -60
  1836. package/kits/dashboard-dados/elementos/NumeroGigante.tsx +0 -21
  1837. package/kits/dashboard-dados/elementos/RankingBarras.tsx +0 -27
  1838. package/kits/dashboard-dados/elementos/RoscaDados.tsx +0 -39
  1839. package/kits/dashboard-dados/elementos/Som.tsx +0 -39
  1840. package/kits/dashboard-dados/elementos/base.ts +0 -87
  1841. package/kits/dashboard-dados/elementos/index.ts +0 -16
  1842. package/kits/dashboard-dados/exemplos/logo-radar.svg +0 -1
  1843. package/kits/dashboard-dados/exemplos/plano.json +0 -325
  1844. package/kits/dashboard-dados/exemplos/roteiro.md +0 -20
  1845. package/kits/dashboard-dados/preview.tsx +0 -12
  1846. package/kits/dashboard-dados/receita.json +0 -173
  1847. package/kits/dashboard-dados/regras/area-segura.md +0 -13
  1848. package/kits/dashboard-dados/regras/cor.md +0 -17
  1849. package/kits/dashboard-dados/regras/movimento.md +0 -17
  1850. package/kits/dashboard-dados/regras/ritmo.md +0 -14
  1851. package/kits/dashboard-dados/regras/som.md +0 -18
  1852. package/kits/dashboard-dados/regras/tipografia.md +0 -16
  1853. package/kits/depoimento/assets/ASSETS.md +0 -20
  1854. package/kits/depoimento/elementos/Avatar.tsx +0 -37
  1855. package/kits/depoimento/elementos/CartaoDepoimento.tsx +0 -69
  1856. package/kits/depoimento/elementos/Cena.tsx +0 -39
  1857. package/kits/depoimento/elementos/Estrelas.tsx +0 -34
  1858. package/kits/depoimento/elementos/FaixaAvatares.tsx +0 -41
  1859. package/kits/depoimento/elementos/Fundo.tsx +0 -23
  1860. package/kits/depoimento/elementos/Montagem.tsx +0 -60
  1861. package/kits/depoimento/elementos/NotaGigante.tsx +0 -38
  1862. package/kits/depoimento/elementos/PilhaCartoes.tsx +0 -37
  1863. package/kits/depoimento/elementos/SeloVerificado.tsx +0 -29
  1864. package/kits/depoimento/elementos/Som.tsx +0 -41
  1865. package/kits/depoimento/elementos/base.ts +0 -83
  1866. package/kits/depoimento/elementos/index.ts +0 -16
  1867. package/kits/depoimento/exemplos/plano.json +0 -57
  1868. package/kits/depoimento/exemplos/roteiro.md +0 -19
  1869. package/kits/depoimento/preview.tsx +0 -9
  1870. package/kits/depoimento/receita.json +0 -21
  1871. package/kits/depoimento/regras/area-segura.md +0 -17
  1872. package/kits/depoimento/regras/cor.md +0 -16
  1873. package/kits/depoimento/regras/movimento.md +0 -20
  1874. package/kits/depoimento/regras/ritmo.md +0 -15
  1875. package/kits/depoimento/regras/som.md +0 -21
  1876. package/kits/depoimento/regras/tipografia.md +0 -17
  1877. package/kits/infografico/assets/ASSETS.md +0 -19
  1878. package/kits/infografico/elementos/Anotacao.tsx +0 -34
  1879. package/kits/infografico/elementos/CadeiaPassos.tsx +0 -49
  1880. package/kits/infografico/elementos/Cena.tsx +0 -39
  1881. package/kits/infografico/elementos/Fundo.tsx +0 -23
  1882. package/kits/infografico/elementos/GraficoBarras.tsx +0 -41
  1883. package/kits/infografico/elementos/Icone.tsx +0 -35
  1884. package/kits/infografico/elementos/Montagem.tsx +0 -60
  1885. package/kits/infografico/elementos/NoProcesso.tsx +0 -33
  1886. package/kits/infografico/elementos/NumeroDestaque.tsx +0 -35
  1887. package/kits/infografico/elementos/SetaCurva.tsx +0 -33
  1888. package/kits/infografico/elementos/Som.tsx +0 -40
  1889. package/kits/infografico/elementos/base.ts +0 -80
  1890. package/kits/infografico/elementos/index.ts +0 -16
  1891. package/kits/infografico/exemplos/plano.json +0 -49
  1892. package/kits/infografico/exemplos/roteiro.md +0 -19
  1893. package/kits/infografico/preview.tsx +0 -9
  1894. package/kits/infografico/receita.json +0 -21
  1895. package/kits/infografico/regras/area-segura.md +0 -17
  1896. package/kits/infografico/regras/cor.md +0 -15
  1897. package/kits/infografico/regras/movimento.md +0 -20
  1898. package/kits/infografico/regras/ritmo.md +0 -15
  1899. package/kits/infografico/regras/som.md +0 -20
  1900. package/kits/infografico/regras/tipografia.md +0 -16
  1901. package/kits/isometrico/assets/ASSETS.md +0 -18
  1902. package/kits/isometrico/elementos/AssinaturaMarca.tsx +0 -24
  1903. package/kits/isometrico/elementos/BlocosMontando.tsx +0 -36
  1904. package/kits/isometrico/elementos/Camera.tsx +0 -23
  1905. package/kits/isometrico/elementos/Cena.tsx +0 -46
  1906. package/kits/isometrico/elementos/CidadeDeDados.tsx +0 -33
  1907. package/kits/isometrico/elementos/Fundo.tsx +0 -13
  1908. package/kits/isometrico/elementos/LegendaPlaca.tsx +0 -18
  1909. package/kits/isometrico/elementos/Montagem.tsx +0 -60
  1910. package/kits/isometrico/elementos/RedeDeBlocos.tsx +0 -41
  1911. package/kits/isometrico/elementos/Som.tsx +0 -39
  1912. package/kits/isometrico/elementos/TextoNoChao.tsx +0 -28
  1913. package/kits/isometrico/elementos/base.ts +0 -86
  1914. package/kits/isometrico/elementos/index.ts +0 -16
  1915. package/kits/isometrico/exemplos/logo-nodo.svg +0 -1
  1916. package/kits/isometrico/exemplos/plano.json +0 -433
  1917. package/kits/isometrico/exemplos/roteiro.md +0 -20
  1918. package/kits/isometrico/preview.tsx +0 -12
  1919. package/kits/isometrico/receita.json +0 -155
  1920. package/kits/isometrico/regras/area-segura.md +0 -13
  1921. package/kits/isometrico/regras/cor.md +0 -18
  1922. package/kits/isometrico/regras/movimento.md +0 -16
  1923. package/kits/isometrico/regras/ritmo.md +0 -13
  1924. package/kits/isometrico/regras/som.md +0 -18
  1925. package/kits/isometrico/regras/tipografia.md +0 -12
  1926. package/kits/jornal/assets/ASSETS.md +0 -24
  1927. package/kits/jornal/elementos/AssinaturaMarca.tsx +0 -25
  1928. package/kits/jornal/elementos/Cabecalho.tsx +0 -21
  1929. package/kits/jornal/elementos/Carimbo.tsx +0 -18
  1930. package/kits/jornal/elementos/Cena.tsx +0 -41
  1931. package/kits/jornal/elementos/Colunas.tsx +0 -24
  1932. package/kits/jornal/elementos/FotoMeiaTinta.tsx +0 -20
  1933. package/kits/jornal/elementos/Fundo.tsx +0 -18
  1934. package/kits/jornal/elementos/JornalGirando.tsx +0 -27
  1935. package/kits/jornal/elementos/Manchete.tsx +0 -30
  1936. package/kits/jornal/elementos/Montagem.tsx +0 -61
  1937. package/kits/jornal/elementos/Som.tsx +0 -38
  1938. package/kits/jornal/elementos/Ticker.tsx +0 -19
  1939. package/kits/jornal/elementos/base.ts +0 -76
  1940. package/kits/jornal/elementos/index.ts +0 -17
  1941. package/kits/jornal/exemplos/fotos/foto-03.jpg +0 -0
  1942. package/kits/jornal/exemplos/fotos/foto-07.jpg +0 -0
  1943. package/kits/jornal/exemplos/logo-esquina.svg +0 -1
  1944. package/kits/jornal/exemplos/plano.json +0 -48
  1945. package/kits/jornal/exemplos/roteiro.md +0 -19
  1946. package/kits/jornal/preview.tsx +0 -17
  1947. package/kits/jornal/receita.json +0 -170
  1948. package/kits/jornal/regras/area-segura.md +0 -19
  1949. package/kits/jornal/regras/cor.md +0 -14
  1950. package/kits/jornal/regras/movimento.md +0 -16
  1951. package/kits/jornal/regras/ritmo.md +0 -15
  1952. package/kits/jornal/regras/som.md +0 -21
  1953. package/kits/jornal/regras/tipografia.md +0 -17
  1954. package/kits/legenda-viva/assets/ASSETS.md +0 -23
  1955. package/kits/legenda-viva/elementos/AssinaturaMarca.tsx +0 -29
  1956. package/kits/legenda-viva/elementos/Cena.tsx +0 -41
  1957. package/kits/legenda-viva/elementos/ChipTema.tsx +0 -19
  1958. package/kits/legenda-viva/elementos/Fundo.tsx +0 -6
  1959. package/kits/legenda-viva/elementos/LegendaCaixa.tsx +0 -36
  1960. package/kits/legenda-viva/elementos/LegendaPalavra.tsx +0 -32
  1961. package/kits/legenda-viva/elementos/Montagem.tsx +0 -59
  1962. package/kits/legenda-viva/elementos/OndaVoz.tsx +0 -23
  1963. package/kits/legenda-viva/elementos/PalavraGigante.tsx +0 -18
  1964. package/kits/legenda-viva/elementos/QuadroFalante.tsx +0 -17
  1965. package/kits/legenda-viva/elementos/Som.tsx +0 -38
  1966. package/kits/legenda-viva/elementos/base.ts +0 -73
  1967. package/kits/legenda-viva/elementos/index.ts +0 -16
  1968. package/kits/legenda-viva/exemplos/fotos/foto-01.jpg +0 -0
  1969. package/kits/legenda-viva/exemplos/fotos/foto-02.jpg +0 -0
  1970. package/kits/legenda-viva/exemplos/fotos/foto-03.jpg +0 -0
  1971. package/kits/legenda-viva/exemplos/fotos/foto-05.jpg +0 -0
  1972. package/kits/legenda-viva/exemplos/logo-dica.svg +0 -1
  1973. package/kits/legenda-viva/exemplos/plano.json +0 -45
  1974. package/kits/legenda-viva/exemplos/roteiro.md +0 -18
  1975. package/kits/legenda-viva/preview.tsx +0 -19
  1976. package/kits/legenda-viva/receita.json +0 -171
  1977. package/kits/legenda-viva/regras/area-segura.md +0 -19
  1978. package/kits/legenda-viva/regras/cor.md +0 -14
  1979. package/kits/legenda-viva/regras/movimento.md +0 -16
  1980. package/kits/legenda-viva/regras/ritmo.md +0 -15
  1981. package/kits/legenda-viva/regras/som.md +0 -21
  1982. package/kits/legenda-viva/regras/tipografia.md +0 -16
  1983. package/kits/luxo/assets/ASSETS.md +0 -20
  1984. package/kits/luxo/elementos/Cena.tsx +0 -36
  1985. package/kits/luxo/elementos/ConviteOuro.tsx +0 -34
  1986. package/kits/luxo/elementos/Fundo.tsx +0 -26
  1987. package/kits/luxo/elementos/LegendaFina.tsx +0 -25
  1988. package/kits/luxo/elementos/LinhaOuro.tsx +0 -24
  1989. package/kits/luxo/elementos/MolduraArco.tsx +0 -36
  1990. package/kits/luxo/elementos/Monograma.tsx +0 -35
  1991. package/kits/luxo/elementos/Montagem.tsx +0 -59
  1992. package/kits/luxo/elementos/Som.tsx +0 -40
  1993. package/kits/luxo/elementos/TituloSerifa.tsx +0 -35
  1994. package/kits/luxo/elementos/base.ts +0 -85
  1995. package/kits/luxo/elementos/index.ts +0 -15
  1996. package/kits/luxo/exemplos/fotos/foto-07.jpg +0 -0
  1997. package/kits/luxo/exemplos/fotos/foto-08.jpg +0 -0
  1998. package/kits/luxo/exemplos/plano.json +0 -145
  1999. package/kits/luxo/exemplos/roteiro.md +0 -18
  2000. package/kits/luxo/preview.tsx +0 -13
  2001. package/kits/luxo/receita.json +0 -18
  2002. package/kits/luxo/regras/area-segura.md +0 -16
  2003. package/kits/luxo/regras/cor.md +0 -16
  2004. package/kits/luxo/regras/movimento.md +0 -19
  2005. package/kits/luxo/regras/ritmo.md +0 -14
  2006. package/kits/luxo/regras/som.md +0 -21
  2007. package/kits/luxo/regras/tipografia.md +0 -17
  2008. package/kits/mapa/assets/ASSETS.md +0 -20
  2009. package/kits/mapa/elementos/CartaoEndereco.tsx +0 -40
  2010. package/kits/mapa/elementos/Cena.tsx +0 -41
  2011. package/kits/mapa/elementos/ChipTempo.tsx +0 -29
  2012. package/kits/mapa/elementos/Fundo.tsx +0 -25
  2013. package/kits/mapa/elementos/MapaBase.tsx +0 -63
  2014. package/kits/mapa/elementos/Montagem.tsx +0 -59
  2015. package/kits/mapa/elementos/Pino.tsx +0 -38
  2016. package/kits/mapa/elementos/RotaAnimada.tsx +0 -38
  2017. package/kits/mapa/elementos/Som.tsx +0 -41
  2018. package/kits/mapa/elementos/TituloLocal.tsx +0 -38
  2019. package/kits/mapa/elementos/base.ts +0 -89
  2020. package/kits/mapa/elementos/index.ts +0 -15
  2021. package/kits/mapa/exemplos/plano.json +0 -48
  2022. package/kits/mapa/exemplos/roteiro.md +0 -19
  2023. package/kits/mapa/preview.tsx +0 -9
  2024. package/kits/mapa/receita.json +0 -21
  2025. package/kits/mapa/regras/area-segura.md +0 -15
  2026. package/kits/mapa/regras/cor.md +0 -18
  2027. package/kits/mapa/regras/movimento.md +0 -21
  2028. package/kits/mapa/regras/ritmo.md +0 -15
  2029. package/kits/mapa/regras/som.md +0 -21
  2030. package/kits/mapa/regras/tipografia.md +0 -16
  2031. package/kits/massinha/assets/ASSETS.md +0 -18
  2032. package/kits/massinha/elementos/AssinaturaMarca.tsx +0 -20
  2033. package/kits/massinha/elementos/BichinhoMassa.tsx +0 -30
  2034. package/kits/massinha/elementos/BolasMassa.tsx +0 -25
  2035. package/kits/massinha/elementos/Camera.tsx +0 -21
  2036. package/kits/massinha/elementos/Cena.tsx +0 -36
  2037. package/kits/massinha/elementos/FormaMassa.tsx +0 -23
  2038. package/kits/massinha/elementos/Fundo.tsx +0 -12
  2039. package/kits/massinha/elementos/ListaMassa.tsx +0 -19
  2040. package/kits/massinha/elementos/Montagem.tsx +0 -56
  2041. package/kits/massinha/elementos/Overlay.tsx +0 -11
  2042. package/kits/massinha/elementos/PlacaMassa.tsx +0 -24
  2043. package/kits/massinha/elementos/Som.tsx +0 -30
  2044. package/kits/massinha/elementos/TituloMassa.tsx +0 -31
  2045. package/kits/massinha/elementos/base.ts +0 -79
  2046. package/kits/massinha/elementos/index.ts +0 -17
  2047. package/kits/massinha/exemplos/plano.json +0 -220
  2048. package/kits/massinha/exemplos/roteiro.md +0 -20
  2049. package/kits/massinha/preview.tsx +0 -12
  2050. package/kits/massinha/receita.json +0 -170
  2051. package/kits/massinha/regras/area-segura.md +0 -15
  2052. package/kits/massinha/regras/cor.md +0 -18
  2053. package/kits/massinha/regras/movimento.md +0 -17
  2054. package/kits/massinha/regras/ritmo.md +0 -15
  2055. package/kits/massinha/regras/som.md +0 -17
  2056. package/kits/massinha/regras/tipografia.md +0 -18
  2057. package/kits/memphis/assets/ASSETS.md +0 -18
  2058. package/kits/memphis/elementos/AssinaturaMarca.tsx +0 -20
  2059. package/kits/memphis/elementos/Camera.tsx +0 -21
  2060. package/kits/memphis/elementos/CartaoMemphis.tsx +0 -16
  2061. package/kits/memphis/elementos/Cena.tsx +0 -36
  2062. package/kits/memphis/elementos/FitaMarquee.tsx +0 -21
  2063. package/kits/memphis/elementos/FormasMemphis.tsx +0 -46
  2064. package/kits/memphis/elementos/Fundo.tsx +0 -15
  2065. package/kits/memphis/elementos/ListaPilulas.tsx +0 -17
  2066. package/kits/memphis/elementos/Montagem.tsx +0 -56
  2067. package/kits/memphis/elementos/NumeroGigante.tsx +0 -19
  2068. package/kits/memphis/elementos/Overlay.tsx +0 -23
  2069. package/kits/memphis/elementos/Som.tsx +0 -30
  2070. package/kits/memphis/elementos/TituloMemphis.tsx +0 -28
  2071. package/kits/memphis/elementos/base.ts +0 -78
  2072. package/kits/memphis/elementos/index.ts +0 -17
  2073. package/kits/memphis/exemplos/plano.json +0 -314
  2074. package/kits/memphis/exemplos/roteiro.md +0 -20
  2075. package/kits/memphis/preview.tsx +0 -12
  2076. package/kits/memphis/receita.json +0 -174
  2077. package/kits/memphis/regras/area-segura.md +0 -14
  2078. package/kits/memphis/regras/cor.md +0 -17
  2079. package/kits/memphis/regras/movimento.md +0 -18
  2080. package/kits/memphis/regras/ritmo.md +0 -15
  2081. package/kits/memphis/regras/som.md +0 -18
  2082. package/kits/memphis/regras/tipografia.md +0 -19
  2083. package/kits/metal-liquido/assets/ASSETS.md +0 -21
  2084. package/kits/metal-liquido/elementos/AnelCromo.tsx +0 -28
  2085. package/kits/metal-liquido/elementos/AssinaturaMarca.tsx +0 -26
  2086. package/kits/metal-liquido/elementos/BolhasCromadas.tsx +0 -53
  2087. package/kits/metal-liquido/elementos/Cena.tsx +0 -48
  2088. package/kits/metal-liquido/elementos/EsferaCromo.tsx +0 -32
  2089. package/kits/metal-liquido/elementos/Fundo.tsx +0 -20
  2090. package/kits/metal-liquido/elementos/Montagem.tsx +0 -67
  2091. package/kits/metal-liquido/elementos/PilulaCromo.tsx +0 -23
  2092. package/kits/metal-liquido/elementos/Som.tsx +0 -33
  2093. package/kits/metal-liquido/elementos/TituloCromo.tsx +0 -32
  2094. package/kits/metal-liquido/elementos/base.ts +0 -94
  2095. package/kits/metal-liquido/elementos/index.ts +0 -15
  2096. package/kits/metal-liquido/exemplos/logo-mercurio.svg +0 -1
  2097. package/kits/metal-liquido/exemplos/plano.json +0 -48
  2098. package/kits/metal-liquido/exemplos/roteiro.md +0 -20
  2099. package/kits/metal-liquido/preview.tsx +0 -12
  2100. package/kits/metal-liquido/receita.json +0 -173
  2101. package/kits/metal-liquido/regras/area-segura.md +0 -16
  2102. package/kits/metal-liquido/regras/cor.md +0 -23
  2103. package/kits/metal-liquido/regras/movimento.md +0 -18
  2104. package/kits/metal-liquido/regras/ritmo.md +0 -14
  2105. package/kits/metal-liquido/regras/som.md +0 -20
  2106. package/kits/metal-liquido/regras/tipografia.md +0 -15
  2107. package/kits/minimal/assets/ASSETS.md +0 -19
  2108. package/kits/minimal/elementos/Cena.tsx +0 -39
  2109. package/kits/minimal/elementos/FormaMorph.tsx +0 -44
  2110. package/kits/minimal/elementos/FraseUnica.tsx +0 -33
  2111. package/kits/minimal/elementos/Fundo.tsx +0 -20
  2112. package/kits/minimal/elementos/LinhaFina.tsx +0 -24
  2113. package/kits/minimal/elementos/Montagem.tsx +0 -59
  2114. package/kits/minimal/elementos/NumeroSolo.tsx +0 -33
  2115. package/kits/minimal/elementos/PontoMovel.tsx +0 -27
  2116. package/kits/minimal/elementos/RodapeMinimal.tsx +0 -26
  2117. package/kits/minimal/elementos/Som.tsx +0 -40
  2118. package/kits/minimal/elementos/base.ts +0 -80
  2119. package/kits/minimal/elementos/index.ts +0 -15
  2120. package/kits/minimal/exemplos/plano.json +0 -48
  2121. package/kits/minimal/exemplos/roteiro.md +0 -19
  2122. package/kits/minimal/preview.tsx +0 -9
  2123. package/kits/minimal/receita.json +0 -21
  2124. package/kits/minimal/regras/area-segura.md +0 -15
  2125. package/kits/minimal/regras/cor.md +0 -12
  2126. package/kits/minimal/regras/movimento.md +0 -20
  2127. package/kits/minimal/regras/ritmo.md +0 -15
  2128. package/kits/minimal/regras/som.md +0 -21
  2129. package/kits/minimal/regras/tipografia.md +0 -15
  2130. package/kits/neon-cidade/assets/ASSETS.md +0 -21
  2131. package/kits/neon-cidade/elementos/AssinaturaMarca.tsx +0 -24
  2132. package/kits/neon-cidade/elementos/CaixaLuminosa.tsx +0 -40
  2133. package/kits/neon-cidade/elementos/Cena.tsx +0 -48
  2134. package/kits/neon-cidade/elementos/Chuva.tsx +0 -23
  2135. package/kits/neon-cidade/elementos/FormaNeon.tsx +0 -42
  2136. package/kits/neon-cidade/elementos/Fundo.tsx +0 -18
  2137. package/kits/neon-cidade/elementos/Horizonte.tsx +0 -34
  2138. package/kits/neon-cidade/elementos/LetreiroNeon.tsx +0 -46
  2139. package/kits/neon-cidade/elementos/Montagem.tsx +0 -67
  2140. package/kits/neon-cidade/elementos/Som.tsx +0 -33
  2141. package/kits/neon-cidade/elementos/base.ts +0 -100
  2142. package/kits/neon-cidade/elementos/index.ts +0 -15
  2143. package/kits/neon-cidade/exemplos/logo-fenix.svg +0 -1
  2144. package/kits/neon-cidade/exemplos/plano.json +0 -50
  2145. package/kits/neon-cidade/exemplos/roteiro.md +0 -20
  2146. package/kits/neon-cidade/preview.tsx +0 -12
  2147. package/kits/neon-cidade/receita.json +0 -151
  2148. package/kits/neon-cidade/regras/area-segura.md +0 -18
  2149. package/kits/neon-cidade/regras/cor.md +0 -23
  2150. package/kits/neon-cidade/regras/movimento.md +0 -18
  2151. package/kits/neon-cidade/regras/ritmo.md +0 -14
  2152. package/kits/neon-cidade/regras/som.md +0 -20
  2153. package/kits/neon-cidade/regras/tipografia.md +0 -15
  2154. package/kits/notion-editorial/assets/ASSETS.md +0 -19
  2155. package/kits/notion-editorial/elementos/AssinaturaMarca.tsx +0 -20
  2156. package/kits/notion-editorial/elementos/BlocoNota.tsx +0 -38
  2157. package/kits/notion-editorial/elementos/Camera.tsx +0 -23
  2158. package/kits/notion-editorial/elementos/Cena.tsx +0 -46
  2159. package/kits/notion-editorial/elementos/Diagrama.tsx +0 -29
  2160. package/kits/notion-editorial/elementos/Fundo.tsx +0 -12
  2161. package/kits/notion-editorial/elementos/Montagem.tsx +0 -60
  2162. package/kits/notion-editorial/elementos/PassosNumerados.tsx +0 -23
  2163. package/kits/notion-editorial/elementos/RabiscoIcone.tsx +0 -33
  2164. package/kits/notion-editorial/elementos/Som.tsx +0 -39
  2165. package/kits/notion-editorial/elementos/TextoSerifa.tsx +0 -53
  2166. package/kits/notion-editorial/elementos/base.ts +0 -87
  2167. package/kits/notion-editorial/elementos/index.ts +0 -16
  2168. package/kits/notion-editorial/exemplos/logo-pauta.svg +0 -1
  2169. package/kits/notion-editorial/exemplos/plano.json +0 -254
  2170. package/kits/notion-editorial/exemplos/roteiro.md +0 -20
  2171. package/kits/notion-editorial/preview.tsx +0 -12
  2172. package/kits/notion-editorial/receita.json +0 -165
  2173. package/kits/notion-editorial/regras/area-segura.md +0 -13
  2174. package/kits/notion-editorial/regras/cor.md +0 -15
  2175. package/kits/notion-editorial/regras/movimento.md +0 -16
  2176. package/kits/notion-editorial/regras/ritmo.md +0 -14
  2177. package/kits/notion-editorial/regras/som.md +0 -18
  2178. package/kits/notion-editorial/regras/tipografia.md +0 -15
  2179. package/kits/papel-recortado/assets/ASSETS.md +0 -18
  2180. package/kits/papel-recortado/elementos/CamadaPapel.tsx +0 -81
  2181. package/kits/papel-recortado/elementos/Camera.tsx +0 -28
  2182. package/kits/papel-recortado/elementos/CartaoCamadas.tsx +0 -38
  2183. package/kits/papel-recortado/elementos/Cena.tsx +0 -29
  2184. package/kits/papel-recortado/elementos/EtiquetaPapel.tsx +0 -40
  2185. package/kits/papel-recortado/elementos/Fita.tsx +0 -21
  2186. package/kits/papel-recortado/elementos/FolhaPopUp.tsx +0 -49
  2187. package/kits/papel-recortado/elementos/Fundo.tsx +0 -10
  2188. package/kits/papel-recortado/elementos/LetrasRecortadas.tsx +0 -48
  2189. package/kits/papel-recortado/elementos/MolduraPapel.tsx +0 -12
  2190. package/kits/papel-recortado/elementos/Montagem.tsx +0 -42
  2191. package/kits/papel-recortado/elementos/Som.tsx +0 -30
  2192. package/kits/papel-recortado/elementos/base.ts +0 -51
  2193. package/kits/papel-recortado/elementos/index.ts +0 -15
  2194. package/kits/papel-recortado/exemplos/plano.json +0 -410
  2195. package/kits/papel-recortado/exemplos/roteiro.md +0 -13
  2196. package/kits/papel-recortado/preview.tsx +0 -9
  2197. package/kits/papel-recortado/receita.json +0 -14
  2198. package/kits/papel-recortado/regras/area-segura.md +0 -13
  2199. package/kits/papel-recortado/regras/cor.md +0 -16
  2200. package/kits/papel-recortado/regras/movimento.md +0 -17
  2201. package/kits/papel-recortado/regras/ritmo.md +0 -13
  2202. package/kits/papel-recortado/regras/som.md +0 -17
  2203. package/kits/papel-recortado/regras/tipografia.md +0 -12
  2204. package/kits/pixel/assets/ASSETS.md +0 -18
  2205. package/kits/pixel/elementos/AssinaturaMarca.tsx +0 -18
  2206. package/kits/pixel/elementos/CaixaDialogo.tsx +0 -22
  2207. package/kits/pixel/elementos/Camera.tsx +0 -21
  2208. package/kits/pixel/elementos/Cena.tsx +0 -36
  2209. package/kits/pixel/elementos/ChuvaDeSprites.tsx +0 -15
  2210. package/kits/pixel/elementos/Fundo.tsx +0 -23
  2211. package/kits/pixel/elementos/HudPlacar.tsx +0 -19
  2212. package/kits/pixel/elementos/MenuPixel.tsx +0 -19
  2213. package/kits/pixel/elementos/Montagem.tsx +0 -56
  2214. package/kits/pixel/elementos/Overlay.tsx +0 -14
  2215. package/kits/pixel/elementos/Som.tsx +0 -30
  2216. package/kits/pixel/elementos/Sprite.tsx +0 -33
  2217. package/kits/pixel/elementos/TituloPixel.tsx +0 -31
  2218. package/kits/pixel/elementos/base.ts +0 -79
  2219. package/kits/pixel/elementos/index.ts +0 -17
  2220. package/kits/pixel/exemplos/plano.json +0 -309
  2221. package/kits/pixel/exemplos/roteiro.md +0 -20
  2222. package/kits/pixel/preview.tsx +0 -12
  2223. package/kits/pixel/receita.json +0 -175
  2224. package/kits/pixel/regras/area-segura.md +0 -14
  2225. package/kits/pixel/regras/cor.md +0 -17
  2226. package/kits/pixel/regras/movimento.md +0 -18
  2227. package/kits/pixel/regras/ritmo.md +0 -15
  2228. package/kits/pixel/regras/som.md +0 -18
  2229. package/kits/pixel/regras/tipografia.md +0 -18
  2230. package/kits/pontos-3d/assets/ASSETS.md +0 -21
  2231. package/kits/pontos-3d/elementos/AssinaturaMarca.tsx +0 -23
  2232. package/kits/pontos-3d/elementos/Cena.tsx +0 -48
  2233. package/kits/pontos-3d/elementos/Contador.tsx +0 -32
  2234. package/kits/pontos-3d/elementos/Fundo.tsx +0 -20
  2235. package/kits/pontos-3d/elementos/Montagem.tsx +0 -67
  2236. package/kits/pontos-3d/elementos/NuvemDePontos.tsx +0 -84
  2237. package/kits/pontos-3d/elementos/RotuloPonto.tsx +0 -32
  2238. package/kits/pontos-3d/elementos/Som.tsx +0 -33
  2239. package/kits/pontos-3d/elementos/TextoDePontos.tsx +0 -55
  2240. package/kits/pontos-3d/elementos/TituloSora.tsx +0 -36
  2241. package/kits/pontos-3d/elementos/base.ts +0 -92
  2242. package/kits/pontos-3d/elementos/index.ts +0 -15
  2243. package/kits/pontos-3d/exemplos/logo-malha.svg +0 -1
  2244. package/kits/pontos-3d/exemplos/plano.json +0 -46
  2245. package/kits/pontos-3d/exemplos/roteiro.md +0 -20
  2246. package/kits/pontos-3d/preview.tsx +0 -12
  2247. package/kits/pontos-3d/receita.json +0 -153
  2248. package/kits/pontos-3d/regras/area-segura.md +0 -17
  2249. package/kits/pontos-3d/regras/cor.md +0 -21
  2250. package/kits/pontos-3d/regras/movimento.md +0 -19
  2251. package/kits/pontos-3d/regras/ritmo.md +0 -14
  2252. package/kits/pontos-3d/regras/som.md +0 -20
  2253. package/kits/pontos-3d/regras/tipografia.md +0 -16
  2254. package/kits/produto-3d/assets/ASSETS.md +0 -18
  2255. package/kits/produto-3d/elementos/AssinaturaMarca.tsx +0 -28
  2256. package/kits/produto-3d/elementos/Camera.tsx +0 -23
  2257. package/kits/produto-3d/elementos/Cena.tsx +0 -55
  2258. package/kits/produto-3d/elementos/Fundo.tsx +0 -45
  2259. package/kits/produto-3d/elementos/Montagem.tsx +0 -53
  2260. package/kits/produto-3d/elementos/NumeroDestaque.tsx +0 -35
  2261. package/kits/produto-3d/elementos/Produto3D.tsx +0 -144
  2262. package/kits/produto-3d/elementos/RotuloChamada.tsx +0 -43
  2263. package/kits/produto-3d/elementos/Som.tsx +0 -39
  2264. package/kits/produto-3d/elementos/TituloMinimo.tsx +0 -45
  2265. package/kits/produto-3d/elementos/VarreduraLuz.tsx +0 -22
  2266. package/kits/produto-3d/elementos/base.ts +0 -109
  2267. package/kits/produto-3d/elementos/index.ts +0 -13
  2268. package/kits/produto-3d/exemplos/plano.json +0 -53
  2269. package/kits/produto-3d/exemplos/roteiro.md +0 -15
  2270. package/kits/produto-3d/preview.tsx +0 -9
  2271. package/kits/produto-3d/receita.json +0 -16
  2272. package/kits/produto-3d/regras/area-segura.md +0 -14
  2273. package/kits/produto-3d/regras/cor.md +0 -20
  2274. package/kits/produto-3d/regras/movimento.md +0 -19
  2275. package/kits/produto-3d/regras/ritmo.md +0 -15
  2276. package/kits/produto-3d/regras/som.md +0 -18
  2277. package/kits/produto-3d/regras/tipografia.md +0 -13
  2278. package/kits/quadro-giz/assets/ASSETS.md +0 -18
  2279. package/kits/quadro-giz/elementos/ApagadorVarrendo.tsx +0 -32
  2280. package/kits/quadro-giz/elementos/AssinaturaMarca.tsx +0 -20
  2281. package/kits/quadro-giz/elementos/Camera.tsx +0 -21
  2282. package/kits/quadro-giz/elementos/CartaoGiz.tsx +0 -25
  2283. package/kits/quadro-giz/elementos/Cena.tsx +0 -36
  2284. package/kits/quadro-giz/elementos/ContaNoQuadro.tsx +0 -34
  2285. package/kits/quadro-giz/elementos/DesenhoGiz.tsx +0 -29
  2286. package/kits/quadro-giz/elementos/Fundo.tsx +0 -21
  2287. package/kits/quadro-giz/elementos/ListaGiz.tsx +0 -21
  2288. package/kits/quadro-giz/elementos/Montagem.tsx +0 -56
  2289. package/kits/quadro-giz/elementos/Overlay.tsx +0 -12
  2290. package/kits/quadro-giz/elementos/Som.tsx +0 -30
  2291. package/kits/quadro-giz/elementos/TituloGiz.tsx +0 -29
  2292. package/kits/quadro-giz/elementos/base.ts +0 -78
  2293. package/kits/quadro-giz/elementos/index.ts +0 -17
  2294. package/kits/quadro-giz/elementos/traco.ts +0 -9
  2295. package/kits/quadro-giz/exemplos/plano.json +0 -237
  2296. package/kits/quadro-giz/exemplos/roteiro.md +0 -20
  2297. package/kits/quadro-giz/preview.tsx +0 -12
  2298. package/kits/quadro-giz/receita.json +0 -193
  2299. package/kits/quadro-giz/regras/area-segura.md +0 -15
  2300. package/kits/quadro-giz/regras/cor.md +0 -17
  2301. package/kits/quadro-giz/regras/movimento.md +0 -18
  2302. package/kits/quadro-giz/regras/ritmo.md +0 -16
  2303. package/kits/quadro-giz/regras/som.md +0 -18
  2304. package/kits/quadro-giz/regras/tipografia.md +0 -19
  2305. package/kits/rabisco/assets/ASSETS.md +0 -18
  2306. package/kits/rabisco/elementos/AssinaturaMarca.tsx +0 -21
  2307. package/kits/rabisco/elementos/Bonequinho.tsx +0 -31
  2308. package/kits/rabisco/elementos/Camera.tsx +0 -21
  2309. package/kits/rabisco/elementos/CartaoRabiscado.tsx +0 -27
  2310. package/kits/rabisco/elementos/Cena.tsx +0 -36
  2311. package/kits/rabisco/elementos/Fundo.tsx +0 -17
  2312. package/kits/rabisco/elementos/ListaRabiscada.tsx +0 -23
  2313. package/kits/rabisco/elementos/Montagem.tsx +0 -55
  2314. package/kits/rabisco/elementos/Som.tsx +0 -30
  2315. package/kits/rabisco/elementos/TituloRabisco.tsx +0 -28
  2316. package/kits/rabisco/elementos/TracoDesenhando.tsx +0 -31
  2317. package/kits/rabisco/elementos/base.ts +0 -76
  2318. package/kits/rabisco/elementos/index.ts +0 -16
  2319. package/kits/rabisco/elementos/traco.ts +0 -10
  2320. package/kits/rabisco/exemplos/plano.json +0 -238
  2321. package/kits/rabisco/exemplos/roteiro.md +0 -20
  2322. package/kits/rabisco/preview.tsx +0 -12
  2323. package/kits/rabisco/receita.json +0 -171
  2324. package/kits/rabisco/regras/area-segura.md +0 -14
  2325. package/kits/rabisco/regras/cor.md +0 -15
  2326. package/kits/rabisco/regras/movimento.md +0 -18
  2327. package/kits/rabisco/regras/ritmo.md +0 -15
  2328. package/kits/rabisco/regras/som.md +0 -17
  2329. package/kits/rabisco/regras/tipografia.md +0 -18
  2330. package/kits/retro-70/assets/ASSETS.md +0 -23
  2331. package/kits/retro-70/elementos/ArcoListras.tsx +0 -25
  2332. package/kits/retro-70/elementos/AssinaturaMarca.tsx +0 -21
  2333. package/kits/retro-70/elementos/CartaoData.tsx +0 -24
  2334. package/kits/retro-70/elementos/Cena.tsx +0 -41
  2335. package/kits/retro-70/elementos/FaixaOnda.tsx +0 -27
  2336. package/kits/retro-70/elementos/Flor70.tsx +0 -25
  2337. package/kits/retro-70/elementos/FotoArredondada.tsx +0 -19
  2338. package/kits/retro-70/elementos/Fundo.tsx +0 -11
  2339. package/kits/retro-70/elementos/Montagem.tsx +0 -60
  2340. package/kits/retro-70/elementos/RaiosDeSol.tsx +0 -27
  2341. package/kits/retro-70/elementos/Som.tsx +0 -38
  2342. package/kits/retro-70/elementos/TituloGordo.tsx +0 -28
  2343. package/kits/retro-70/elementos/base.ts +0 -73
  2344. package/kits/retro-70/elementos/index.ts +0 -17
  2345. package/kits/retro-70/exemplos/fotos/foto-02.jpg +0 -0
  2346. package/kits/retro-70/exemplos/fotos/foto-03.jpg +0 -0
  2347. package/kits/retro-70/exemplos/logo-girassol.svg +0 -1
  2348. package/kits/retro-70/exemplos/plano.json +0 -50
  2349. package/kits/retro-70/exemplos/roteiro.md +0 -19
  2350. package/kits/retro-70/preview.tsx +0 -17
  2351. package/kits/retro-70/receita.json +0 -172
  2352. package/kits/retro-70/regras/area-segura.md +0 -20
  2353. package/kits/retro-70/regras/cor.md +0 -14
  2354. package/kits/retro-70/regras/movimento.md +0 -16
  2355. package/kits/retro-70/regras/ritmo.md +0 -15
  2356. package/kits/retro-70/regras/som.md +0 -21
  2357. package/kits/retro-70/regras/tipografia.md +0 -17
  2358. package/kits/revista/assets/ASSETS.md +0 -24
  2359. package/kits/revista/elementos/AssinaturaMarca.tsx +0 -23
  2360. package/kits/revista/elementos/Cena.tsx +0 -41
  2361. package/kits/revista/elementos/CitacaoGrande.tsx +0 -27
  2362. package/kits/revista/elementos/ColagemFotos.tsx +0 -22
  2363. package/kits/revista/elementos/Folio.tsx +0 -19
  2364. package/kits/revista/elementos/FotoSangrando.tsx +0 -24
  2365. package/kits/revista/elementos/Fundo.tsx +0 -11
  2366. package/kits/revista/elementos/Montagem.tsx +0 -59
  2367. package/kits/revista/elementos/PaginaDupla.tsx +0 -36
  2368. package/kits/revista/elementos/Som.tsx +0 -38
  2369. package/kits/revista/elementos/TituloEditorial.tsx +0 -31
  2370. package/kits/revista/elementos/base.ts +0 -76
  2371. package/kits/revista/elementos/index.ts +0 -16
  2372. package/kits/revista/exemplos/fotos/foto-02.jpg +0 -0
  2373. package/kits/revista/exemplos/fotos/foto-03.jpg +0 -0
  2374. package/kits/revista/exemplos/fotos/foto-05.jpg +0 -0
  2375. package/kits/revista/exemplos/fotos/foto-06.jpg +0 -0
  2376. package/kits/revista/exemplos/fotos/foto-07.jpg +0 -0
  2377. package/kits/revista/exemplos/fotos/foto-08.jpg +0 -0
  2378. package/kits/revista/exemplos/logo-linho.svg +0 -1
  2379. package/kits/revista/exemplos/plano.json +0 -44
  2380. package/kits/revista/exemplos/roteiro.md +0 -19
  2381. package/kits/revista/preview.tsx +0 -21
  2382. package/kits/revista/receita.json +0 -168
  2383. package/kits/revista/regras/area-segura.md +0 -19
  2384. package/kits/revista/regras/cor.md +0 -14
  2385. package/kits/revista/regras/movimento.md +0 -15
  2386. package/kits/revista/regras/ritmo.md +0 -15
  2387. package/kits/revista/regras/som.md +0 -21
  2388. package/kits/revista/regras/tipografia.md +0 -17
  2389. package/kits/risografia/assets/ASSETS.md +0 -18
  2390. package/kits/risografia/elementos/AssinaturaMarca.tsx +0 -21
  2391. package/kits/risografia/elementos/BolaReticula.tsx +0 -26
  2392. package/kits/risografia/elementos/Camera.tsx +0 -21
  2393. package/kits/risografia/elementos/Cena.tsx +0 -36
  2394. package/kits/risografia/elementos/FormaRiso.tsx +0 -24
  2395. package/kits/risografia/elementos/Fundo.tsx +0 -12
  2396. package/kits/risografia/elementos/ListaRiso.tsx +0 -22
  2397. package/kits/risografia/elementos/Montagem.tsx +0 -56
  2398. package/kits/risografia/elementos/NumeroRiso.tsx +0 -21
  2399. package/kits/risografia/elementos/Overlay.tsx +0 -18
  2400. package/kits/risografia/elementos/Som.tsx +0 -30
  2401. package/kits/risografia/elementos/TarjaCarimbo.tsx +0 -20
  2402. package/kits/risografia/elementos/TituloRiso.tsx +0 -26
  2403. package/kits/risografia/elementos/base.ts +0 -73
  2404. package/kits/risografia/elementos/index.ts +0 -17
  2405. package/kits/risografia/exemplos/plano.json +0 -209
  2406. package/kits/risografia/exemplos/roteiro.md +0 -20
  2407. package/kits/risografia/preview.tsx +0 -12
  2408. package/kits/risografia/receita.json +0 -169
  2409. package/kits/risografia/regras/area-segura.md +0 -14
  2410. package/kits/risografia/regras/cor.md +0 -12
  2411. package/kits/risografia/regras/movimento.md +0 -18
  2412. package/kits/risografia/regras/ritmo.md +0 -15
  2413. package/kits/risografia/regras/som.md +0 -17
  2414. package/kits/risografia/regras/tipografia.md +0 -18
  2415. package/kits/saas-linear/assets/ASSETS.md +0 -19
  2416. package/kits/saas-linear/assets/fontes/OFL-Inter.txt +0 -93
  2417. package/kits/saas-linear/assets/fontes/OFL-Newsreader.txt +0 -93
  2418. package/kits/saas-linear/assets/fontes/inter-400.woff2 +0 -0
  2419. package/kits/saas-linear/assets/fontes/inter-600.woff2 +0 -0
  2420. package/kits/saas-linear/assets/fontes/newsreader-400.woff2 +0 -0
  2421. package/kits/saas-linear/elementos/Agenda.tsx +0 -46
  2422. package/kits/saas-linear/elementos/CaixaPrompt.tsx +0 -41
  2423. package/kits/saas-linear/elementos/Camera.tsx +0 -38
  2424. package/kits/saas-linear/elementos/CartoesIntegracao.tsx +0 -57
  2425. package/kits/saas-linear/elementos/Cena.tsx +0 -38
  2426. package/kits/saas-linear/elementos/Cursor.tsx +0 -40
  2427. package/kits/saas-linear/elementos/FraseSerifa.tsx +0 -25
  2428. package/kits/saas-linear/elementos/Fundo.tsx +0 -18
  2429. package/kits/saas-linear/elementos/Marca.tsx +0 -20
  2430. package/kits/saas-linear/elementos/MarcaFinal.tsx +0 -22
  2431. package/kits/saas-linear/elementos/Menu.tsx +0 -46
  2432. package/kits/saas-linear/elementos/Monitor.tsx +0 -28
  2433. package/kits/saas-linear/elementos/Montagem.tsx +0 -67
  2434. package/kits/saas-linear/elementos/Saudacao.tsx +0 -27
  2435. package/kits/saas-linear/elementos/Som.tsx +0 -39
  2436. package/kits/saas-linear/elementos/base.ts +0 -84
  2437. package/kits/saas-linear/elementos/index.ts +0 -21
  2438. package/kits/saas-linear/exemplos/plano.json +0 -459
  2439. package/kits/saas-linear/exemplos/roteiro.md +0 -15
  2440. package/kits/saas-linear/preview.tsx +0 -9
  2441. package/kits/saas-linear/receita.json +0 -32
  2442. package/kits/saas-linear/regras/area-segura.md +0 -17
  2443. package/kits/saas-linear/regras/cor.md +0 -19
  2444. package/kits/saas-linear/regras/movimento.md +0 -20
  2445. package/kits/saas-linear/regras/ritmo.md +0 -14
  2446. package/kits/saas-linear/regras/som.md +0 -16
  2447. package/kits/saas-linear/regras/tipografia.md +0 -17
  2448. package/kits/stripe-ondas/assets/ASSETS.md +0 -18
  2449. package/kits/stripe-ondas/elementos/AssinaturaMarca.tsx +0 -18
  2450. package/kits/stripe-ondas/elementos/Camera.tsx +0 -23
  2451. package/kits/stripe-ondas/elementos/CartaoPagamento.tsx +0 -35
  2452. package/kits/stripe-ondas/elementos/Cena.tsx +0 -46
  2453. package/kits/stripe-ondas/elementos/FaixaDeOndas.tsx +0 -49
  2454. package/kits/stripe-ondas/elementos/Fundo.tsx +0 -11
  2455. package/kits/stripe-ondas/elementos/GraficoOnda.tsx +0 -34
  2456. package/kits/stripe-ondas/elementos/Montagem.tsx +0 -61
  2457. package/kits/stripe-ondas/elementos/PainelCodigo.tsx +0 -36
  2458. package/kits/stripe-ondas/elementos/SelosDeMetodo.tsx +0 -27
  2459. package/kits/stripe-ondas/elementos/Som.tsx +0 -39
  2460. package/kits/stripe-ondas/elementos/TituloLimpo.tsx +0 -27
  2461. package/kits/stripe-ondas/elementos/base.ts +0 -85
  2462. package/kits/stripe-ondas/elementos/index.ts +0 -16
  2463. package/kits/stripe-ondas/exemplos/logo-cais.svg +0 -1
  2464. package/kits/stripe-ondas/exemplos/plano.json +0 -366
  2465. package/kits/stripe-ondas/exemplos/roteiro.md +0 -20
  2466. package/kits/stripe-ondas/preview.tsx +0 -12
  2467. package/kits/stripe-ondas/receita.json +0 -177
  2468. package/kits/stripe-ondas/regras/area-segura.md +0 -16
  2469. package/kits/stripe-ondas/regras/cor.md +0 -17
  2470. package/kits/stripe-ondas/regras/movimento.md +0 -16
  2471. package/kits/stripe-ondas/regras/ritmo.md +0 -14
  2472. package/kits/stripe-ondas/regras/som.md +0 -18
  2473. package/kits/stripe-ondas/regras/tipografia.md +0 -15
  2474. package/kits/suica/assets/ASSETS.md +0 -23
  2475. package/kits/suica/elementos/AssinaturaMarca.tsx +0 -21
  2476. package/kits/suica/elementos/Cena.tsx +0 -41
  2477. package/kits/suica/elementos/DiscoFoto.tsx +0 -20
  2478. package/kits/suica/elementos/Fundo.tsx +0 -16
  2479. package/kits/suica/elementos/GradeFotos.tsx +0 -21
  2480. package/kits/suica/elementos/Indice.tsx +0 -17
  2481. package/kits/suica/elementos/ListaIndice.tsx +0 -25
  2482. package/kits/suica/elementos/Montagem.tsx +0 -60
  2483. package/kits/suica/elementos/NumeroGigante.tsx +0 -21
  2484. package/kits/suica/elementos/Regua.tsx +0 -20
  2485. package/kits/suica/elementos/Som.tsx +0 -38
  2486. package/kits/suica/elementos/TituloGrade.tsx +0 -38
  2487. package/kits/suica/elementos/base.ts +0 -76
  2488. package/kits/suica/elementos/index.ts +0 -17
  2489. package/kits/suica/exemplos/fotos/foto-01.jpg +0 -0
  2490. package/kits/suica/exemplos/fotos/foto-02.jpg +0 -0
  2491. package/kits/suica/exemplos/fotos/foto-03.jpg +0 -0
  2492. package/kits/suica/exemplos/fotos/foto-05.jpg +0 -0
  2493. package/kits/suica/exemplos/fotos/foto-06.jpg +0 -0
  2494. package/kits/suica/exemplos/fotos/foto-07.jpg +0 -0
  2495. package/kits/suica/exemplos/logo-ponto.svg +0 -1
  2496. package/kits/suica/exemplos/plano.json +0 -268
  2497. package/kits/suica/exemplos/roteiro.md +0 -19
  2498. package/kits/suica/preview.tsx +0 -21
  2499. package/kits/suica/receita.json +0 -197
  2500. package/kits/suica/regras/area-segura.md +0 -18
  2501. package/kits/suica/regras/cor.md +0 -13
  2502. package/kits/suica/regras/movimento.md +0 -15
  2503. package/kits/suica/regras/ritmo.md +0 -17
  2504. package/kits/suica/regras/som.md +0 -21
  2505. package/kits/suica/regras/tipografia.md +0 -16
  2506. package/kits/synthwave/assets/ASSETS.md +0 -22
  2507. package/kits/synthwave/elementos/AssinaturaMarca.tsx +0 -26
  2508. package/kits/synthwave/elementos/Cena.tsx +0 -41
  2509. package/kits/synthwave/elementos/Estrelas.tsx +0 -27
  2510. package/kits/synthwave/elementos/Fundo.tsx +0 -20
  2511. package/kits/synthwave/elementos/Montagem.tsx +0 -59
  2512. package/kits/synthwave/elementos/Montanhas.tsx +0 -27
  2513. package/kits/synthwave/elementos/Palmeiras.tsx +0 -30
  2514. package/kits/synthwave/elementos/QuadroHUD.tsx +0 -33
  2515. package/kits/synthwave/elementos/SolListrado.tsx +0 -29
  2516. package/kits/synthwave/elementos/Som.tsx +0 -38
  2517. package/kits/synthwave/elementos/TituloNeon.tsx +0 -30
  2518. package/kits/synthwave/elementos/base.ts +0 -75
  2519. package/kits/synthwave/elementos/index.ts +0 -16
  2520. package/kits/synthwave/exemplos/logo-arcade.svg +0 -1
  2521. package/kits/synthwave/exemplos/plano.json +0 -50
  2522. package/kits/synthwave/exemplos/roteiro.md +0 -19
  2523. package/kits/synthwave/preview.tsx +0 -16
  2524. package/kits/synthwave/receita.json +0 -170
  2525. package/kits/synthwave/regras/area-segura.md +0 -19
  2526. package/kits/synthwave/regras/cor.md +0 -16
  2527. package/kits/synthwave/regras/movimento.md +0 -16
  2528. package/kits/synthwave/regras/ritmo.md +0 -15
  2529. package/kits/synthwave/regras/som.md +0 -21
  2530. package/kits/synthwave/regras/tipografia.md +0 -16
  2531. package/kits/terminal/assets/ASSETS.md +0 -20
  2532. package/kits/terminal/elementos/ArteAscii.tsx +0 -61
  2533. package/kits/terminal/elementos/BarraProgresso.tsx +0 -42
  2534. package/kits/terminal/elementos/BarraStatus.tsx +0 -18
  2535. package/kits/terminal/elementos/BootBios.tsx +0 -41
  2536. package/kits/terminal/elementos/Camera.tsx +0 -23
  2537. package/kits/terminal/elementos/Cena.tsx +0 -25
  2538. package/kits/terminal/elementos/Fundo.tsx +0 -22
  2539. package/kits/terminal/elementos/LinhaComando.tsx +0 -31
  2540. package/kits/terminal/elementos/Monitor.tsx +0 -42
  2541. package/kits/terminal/elementos/Montagem.tsx +0 -52
  2542. package/kits/terminal/elementos/PainelCaixa.tsx +0 -35
  2543. package/kits/terminal/elementos/Som.tsx +0 -32
  2544. package/kits/terminal/elementos/Tela.tsx +0 -25
  2545. package/kits/terminal/elementos/TextoGrande.tsx +0 -35
  2546. package/kits/terminal/elementos/base.ts +0 -67
  2547. package/kits/terminal/elementos/index.ts +0 -16
  2548. package/kits/terminal/exemplos/plano.json +0 -330
  2549. package/kits/terminal/exemplos/roteiro.md +0 -14
  2550. package/kits/terminal/preview.tsx +0 -9
  2551. package/kits/terminal/receita.json +0 -14
  2552. package/kits/terminal/regras/area-segura.md +0 -18
  2553. package/kits/terminal/regras/cor.md +0 -16
  2554. package/kits/terminal/regras/movimento.md +0 -15
  2555. package/kits/terminal/regras/ritmo.md +0 -14
  2556. package/kits/terminal/regras/som.md +0 -17
  2557. package/kits/terminal/regras/tipografia.md +0 -15
  2558. package/kits/tiktok-energia/assets/ASSETS.md +0 -22
  2559. package/kits/tiktok-energia/elementos/AssinaturaMarca.tsx +0 -25
  2560. package/kits/tiktok-energia/elementos/Cena.tsx +0 -48
  2561. package/kits/tiktok-energia/elementos/CorteDeCor.tsx +0 -22
  2562. package/kits/tiktok-energia/elementos/EmojiSticker.tsx +0 -21
  2563. package/kits/tiktok-energia/elementos/FotoSoco.tsx +0 -27
  2564. package/kits/tiktok-energia/elementos/Fundo.tsx +0 -8
  2565. package/kits/tiktok-energia/elementos/Montagem.tsx +0 -67
  2566. package/kits/tiktok-energia/elementos/PalavraSoco.tsx +0 -29
  2567. package/kits/tiktok-energia/elementos/Som.tsx +0 -33
  2568. package/kits/tiktok-energia/elementos/TextoCaixa.tsx +0 -25
  2569. package/kits/tiktok-energia/elementos/base.ts +0 -92
  2570. package/kits/tiktok-energia/elementos/index.ts +0 -15
  2571. package/kits/tiktok-energia/exemplos/fotos/foto-03.jpg +0 -0
  2572. package/kits/tiktok-energia/exemplos/logo-pulo.svg +0 -1
  2573. package/kits/tiktok-energia/exemplos/plano.json +0 -66
  2574. package/kits/tiktok-energia/exemplos/roteiro.md +0 -22
  2575. package/kits/tiktok-energia/preview.tsx +0 -13
  2576. package/kits/tiktok-energia/receita.json +0 -166
  2577. package/kits/tiktok-energia/regras/area-segura.md +0 -19
  2578. package/kits/tiktok-energia/regras/cor.md +0 -20
  2579. package/kits/tiktok-energia/regras/movimento.md +0 -17
  2580. package/kits/tiktok-energia/regras/ritmo.md +0 -15
  2581. package/kits/tiktok-energia/regras/som.md +0 -20
  2582. package/kits/tiktok-energia/regras/tipografia.md +0 -15
  2583. package/kits/tunel/assets/ASSETS.md +0 -21
  2584. package/kits/tunel/elementos/AssinaturaMarca.tsx +0 -22
  2585. package/kits/tunel/elementos/Cena.tsx +0 -48
  2586. package/kits/tunel/elementos/Fundo.tsx +0 -13
  2587. package/kits/tunel/elementos/LinhasDeVelocidade.tsx +0 -25
  2588. package/kits/tunel/elementos/Montagem.tsx +0 -67
  2589. package/kits/tunel/elementos/NumeroGigante.tsx +0 -28
  2590. package/kits/tunel/elementos/PlacaVoadora.tsx +0 -28
  2591. package/kits/tunel/elementos/Som.tsx +0 -33
  2592. package/kits/tunel/elementos/TituloTunel.tsx +0 -32
  2593. package/kits/tunel/elementos/TunelDeFormas.tsx +0 -52
  2594. package/kits/tunel/elementos/base.ts +0 -97
  2595. package/kits/tunel/elementos/index.ts +0 -15
  2596. package/kits/tunel/exemplos/logo-rota21.svg +0 -1
  2597. package/kits/tunel/exemplos/plano.json +0 -51
  2598. package/kits/tunel/exemplos/roteiro.md +0 -20
  2599. package/kits/tunel/preview.tsx +0 -12
  2600. package/kits/tunel/receita.json +0 -153
  2601. package/kits/tunel/regras/area-segura.md +0 -18
  2602. package/kits/tunel/regras/cor.md +0 -21
  2603. package/kits/tunel/regras/movimento.md +0 -17
  2604. package/kits/tunel/regras/ritmo.md +0 -14
  2605. package/kits/tunel/regras/som.md +0 -20
  2606. package/kits/tunel/regras/tipografia.md +0 -15
  2607. package/kits/tutorial-tela/assets/ASSETS.md +0 -20
  2608. package/kits/tutorial-tela/elementos/CameraTela.tsx +0 -29
  2609. package/kits/tutorial-tela/elementos/Cursor.tsx +0 -36
  2610. package/kits/tutorial-tela/elementos/DestaqueCaixa.tsx +0 -17
  2611. package/kits/tutorial-tela/elementos/Fundo.tsx +0 -12
  2612. package/kits/tutorial-tela/elementos/JanelaApp.tsx +0 -81
  2613. package/kits/tutorial-tela/elementos/Montagem.tsx +0 -49
  2614. package/kits/tutorial-tela/elementos/PassoChamada.tsx +0 -22
  2615. package/kits/tutorial-tela/elementos/Som.tsx +0 -41
  2616. package/kits/tutorial-tela/elementos/TeclaAtalho.tsx +0 -29
  2617. package/kits/tutorial-tela/elementos/TituloTela.tsx +0 -30
  2618. package/kits/tutorial-tela/elementos/base.ts +0 -65
  2619. package/kits/tutorial-tela/elementos/index.ts +0 -12
  2620. package/kits/tutorial-tela/exemplos/plano.json +0 -41
  2621. package/kits/tutorial-tela/exemplos/roteiro.md +0 -14
  2622. package/kits/tutorial-tela/preview.tsx +0 -9
  2623. package/kits/tutorial-tela/receita.json +0 -15
  2624. package/kits/tutorial-tela/regras/area-segura.md +0 -13
  2625. package/kits/tutorial-tela/regras/cor.md +0 -17
  2626. package/kits/tutorial-tela/regras/movimento.md +0 -20
  2627. package/kits/tutorial-tela/regras/ritmo.md +0 -24
  2628. package/kits/tutorial-tela/regras/som.md +0 -21
  2629. package/kits/tutorial-tela/regras/tipografia.md +0 -15
  2630. package/kits/ugc-reels/assets/ASSETS.md +0 -22
  2631. package/kits/ugc-reels/elementos/AssinaturaMarca.tsx +0 -28
  2632. package/kits/ugc-reels/elementos/BotaoLink.tsx +0 -24
  2633. package/kits/ugc-reels/elementos/CabecalhoPerfil.tsx +0 -38
  2634. package/kits/ugc-reels/elementos/Cena.tsx +0 -48
  2635. package/kits/ugc-reels/elementos/Comentario.tsx +0 -29
  2636. package/kits/ugc-reels/elementos/Fundo.tsx +0 -8
  2637. package/kits/ugc-reels/elementos/LegendaEmoji.tsx +0 -43
  2638. package/kits/ugc-reels/elementos/Montagem.tsx +0 -69
  2639. package/kits/ugc-reels/elementos/NotaDeMao.tsx +0 -29
  2640. package/kits/ugc-reels/elementos/Reacoes.tsx +0 -26
  2641. package/kits/ugc-reels/elementos/Som.tsx +0 -33
  2642. package/kits/ugc-reels/elementos/VideoCelular.tsx +0 -37
  2643. package/kits/ugc-reels/elementos/base.ts +0 -92
  2644. package/kits/ugc-reels/elementos/index.ts +0 -17
  2645. package/kits/ugc-reels/exemplos/fotos/foto-02.jpg +0 -0
  2646. package/kits/ugc-reels/exemplos/fotos/foto-03.jpg +0 -0
  2647. package/kits/ugc-reels/exemplos/fotos/foto-04.jpg +0 -0
  2648. package/kits/ugc-reels/exemplos/fotos/foto-06.jpg +0 -0
  2649. package/kits/ugc-reels/exemplos/logo-rotina.svg +0 -1
  2650. package/kits/ugc-reels/exemplos/plano.json +0 -54
  2651. package/kits/ugc-reels/exemplos/roteiro.md +0 -20
  2652. package/kits/ugc-reels/preview.tsx +0 -16
  2653. package/kits/ugc-reels/receita.json +0 -147
  2654. package/kits/ugc-reels/regras/area-segura.md +0 -18
  2655. package/kits/ugc-reels/regras/cor.md +0 -22
  2656. package/kits/ugc-reels/regras/movimento.md +0 -19
  2657. package/kits/ugc-reels/regras/ritmo.md +0 -14
  2658. package/kits/ugc-reels/regras/som.md +0 -20
  2659. package/kits/ugc-reels/regras/tipografia.md +0 -16
  2660. package/kits/vercel-mono/assets/ASSETS.md +0 -18
  2661. package/kits/vercel-mono/assets/sons/assinatura.mp3 +0 -0
  2662. package/kits/vercel-mono/assets/sons/clique.mp3 +0 -0
  2663. package/kits/vercel-mono/assets/sons/impacto.mp3 +0 -0
  2664. package/kits/vercel-mono/assets/sons/pop-cartao.mp3 +0 -0
  2665. package/kits/vercel-mono/assets/sons/pop-palavra.mp3 +0 -0
  2666. package/kits/vercel-mono/assets/sons/subida.mp3 +0 -0
  2667. package/kits/vercel-mono/assets/sons/swoosh.mp3 +0 -0
  2668. package/kits/vercel-mono/assets/sons/whoosh-entra.mp3 +0 -0
  2669. package/kits/vercel-mono/assets/sons/whoosh-sai.mp3 +0 -0
  2670. package/kits/vercel-mono/elementos/AssinaturaMarca.tsx +0 -18
  2671. package/kits/vercel-mono/elementos/Camera.tsx +0 -23
  2672. package/kits/vercel-mono/elementos/Cena.tsx +0 -46
  2673. package/kits/vercel-mono/elementos/FaixaOutline.tsx +0 -25
  2674. package/kits/vercel-mono/elementos/Fundo.tsx +0 -6
  2675. package/kits/vercel-mono/elementos/GradeDeNumeros.tsx +0 -27
  2676. package/kits/vercel-mono/elementos/Montagem.tsx +0 -61
  2677. package/kits/vercel-mono/elementos/PalavraMono.tsx +0 -31
  2678. package/kits/vercel-mono/elementos/Quadro.tsx +0 -28
  2679. package/kits/vercel-mono/elementos/Som.tsx +0 -39
  2680. package/kits/vercel-mono/elementos/TerminalComando.tsx +0 -33
  2681. package/kits/vercel-mono/elementos/TrianguloGigante.tsx +0 -27
  2682. package/kits/vercel-mono/elementos/base.ts +0 -82
  2683. package/kits/vercel-mono/elementos/index.ts +0 -16
  2684. package/kits/vercel-mono/exemplos/logo-vetor.svg +0 -1
  2685. package/kits/vercel-mono/exemplos/plano.json +0 -318
  2686. package/kits/vercel-mono/exemplos/roteiro.md +0 -20
  2687. package/kits/vercel-mono/preview.tsx +0 -12
  2688. package/kits/vercel-mono/receita.json +0 -156
  2689. package/kits/vercel-mono/regras/area-segura.md +0 -13
  2690. package/kits/vercel-mono/regras/cor.md +0 -12
  2691. package/kits/vercel-mono/regras/movimento.md +0 -15
  2692. package/kits/vercel-mono/regras/ritmo.md +0 -13
  2693. package/kits/vercel-mono/regras/som.md +0 -18
  2694. package/kits/vercel-mono/regras/tipografia.md +0 -14
  2695. package/kits/vhs-90/assets/ASSETS.md +0 -23
  2696. package/kits/vhs-90/elementos/AssinaturaMarca.tsx +0 -29
  2697. package/kits/vhs-90/elementos/BarrasRastreio.tsx +0 -21
  2698. package/kits/vhs-90/elementos/CapaVHS.tsx +0 -28
  2699. package/kits/vhs-90/elementos/CarimboData.tsx +0 -19
  2700. package/kits/vhs-90/elementos/Cena.tsx +0 -41
  2701. package/kits/vhs-90/elementos/Fundo.tsx +0 -27
  2702. package/kits/vhs-90/elementos/MenuOSD.tsx +0 -27
  2703. package/kits/vhs-90/elementos/Montagem.tsx +0 -60
  2704. package/kits/vhs-90/elementos/Som.tsx +0 -38
  2705. package/kits/vhs-90/elementos/TelaAzul.tsx +0 -29
  2706. package/kits/vhs-90/elementos/TituloFita.tsx +0 -40
  2707. package/kits/vhs-90/elementos/base.ts +0 -75
  2708. package/kits/vhs-90/elementos/index.ts +0 -16
  2709. package/kits/vhs-90/exemplos/fotos/foto-05.jpg +0 -0
  2710. package/kits/vhs-90/exemplos/fotos/foto-07.jpg +0 -0
  2711. package/kits/vhs-90/exemplos/logo-rewind.svg +0 -1
  2712. package/kits/vhs-90/exemplos/plano.json +0 -47
  2713. package/kits/vhs-90/exemplos/roteiro.md +0 -19
  2714. package/kits/vhs-90/preview.tsx +0 -17
  2715. package/kits/vhs-90/receita.json +0 -189
  2716. package/kits/vhs-90/regras/area-segura.md +0 -18
  2717. package/kits/vhs-90/regras/cor.md +0 -16
  2718. package/kits/vhs-90/regras/movimento.md +0 -16
  2719. package/kits/vhs-90/regras/ritmo.md +0 -16
  2720. package/kits/vhs-90/regras/som.md +0 -21
  2721. package/kits/vhs-90/regras/tipografia.md +0 -17
  2722. package/kits/vidro-ios/assets/ASSETS.md +0 -18
  2723. package/kits/vidro-ios/elementos/AssinaturaMarca.tsx +0 -21
  2724. package/kits/vidro-ios/elementos/Camera.tsx +0 -23
  2725. package/kits/vidro-ios/elementos/Cena.tsx +0 -46
  2726. package/kits/vidro-ios/elementos/Fundo.tsx +0 -17
  2727. package/kits/vidro-ios/elementos/IlhaDinamica.tsx +0 -24
  2728. package/kits/vidro-ios/elementos/Montagem.tsx +0 -60
  2729. package/kits/vidro-ios/elementos/PainelControle.tsx +0 -33
  2730. package/kits/vidro-ios/elementos/PilhaNotificacoes.tsx +0 -29
  2731. package/kits/vidro-ios/elementos/Som.tsx +0 -39
  2732. package/kits/vidro-ios/elementos/TituloVidro.tsx +0 -22
  2733. package/kits/vidro-ios/elementos/WidgetsGrade.tsx +0 -34
  2734. package/kits/vidro-ios/elementos/base.ts +0 -87
  2735. package/kits/vidro-ios/elementos/index.ts +0 -16
  2736. package/kits/vidro-ios/elementos/vidro.tsx +0 -20
  2737. package/kits/vidro-ios/exemplos/logo-vento.svg +0 -1
  2738. package/kits/vidro-ios/exemplos/plano.json +0 -288
  2739. package/kits/vidro-ios/exemplos/roteiro.md +0 -20
  2740. package/kits/vidro-ios/preview.tsx +0 -12
  2741. package/kits/vidro-ios/receita.json +0 -170
  2742. package/kits/vidro-ios/regras/area-segura.md +0 -13
  2743. package/kits/vidro-ios/regras/cor.md +0 -16
  2744. package/kits/vidro-ios/regras/movimento.md +0 -16
  2745. package/kits/vidro-ios/regras/ritmo.md +0 -14
  2746. package/kits/vidro-ios/regras/som.md +0 -18
  2747. package/kits/vidro-ios/regras/tipografia.md +0 -15
  2748. package/kits/y2k-cromado/assets/ASSETS.md +0 -23
  2749. package/kits/y2k-cromado/elementos/AssinaturaMarca.tsx +0 -25
  2750. package/kits/y2k-cromado/elementos/Bolhas.tsx +0 -30
  2751. package/kits/y2k-cromado/elementos/Brilhos.tsx +0 -28
  2752. package/kits/y2k-cromado/elementos/CartaoGloss.tsx +0 -26
  2753. package/kits/y2k-cromado/elementos/Cena.tsx +0 -41
  2754. package/kits/y2k-cromado/elementos/FitaMarquee.tsx +0 -20
  2755. package/kits/y2k-cromado/elementos/Fundo.tsx +0 -18
  2756. package/kits/y2k-cromado/elementos/JanelaY2K.tsx +0 -31
  2757. package/kits/y2k-cromado/elementos/Montagem.tsx +0 -60
  2758. package/kits/y2k-cromado/elementos/OrbeCromo.tsx +0 -20
  2759. package/kits/y2k-cromado/elementos/Som.tsx +0 -38
  2760. package/kits/y2k-cromado/elementos/TextoCromo.tsx +0 -34
  2761. package/kits/y2k-cromado/elementos/base.ts +0 -75
  2762. package/kits/y2k-cromado/elementos/index.ts +0 -17
  2763. package/kits/y2k-cromado/exemplos/fotos/foto-02.jpg +0 -0
  2764. package/kits/y2k-cromado/exemplos/fotos/foto-03.jpg +0 -0
  2765. package/kits/y2k-cromado/exemplos/logo-bolha.svg +0 -1
  2766. package/kits/y2k-cromado/exemplos/plano.json +0 -47
  2767. package/kits/y2k-cromado/exemplos/roteiro.md +0 -19
  2768. package/kits/y2k-cromado/preview.tsx +0 -17
  2769. package/kits/y2k-cromado/receita.json +0 -174
  2770. package/kits/y2k-cromado/regras/area-segura.md +0 -19
  2771. package/kits/y2k-cromado/regras/cor.md +0 -16
  2772. package/kits/y2k-cromado/regras/movimento.md +0 -16
  2773. package/kits/y2k-cromado/regras/ritmo.md +0 -15
  2774. package/kits/y2k-cromado/regras/som.md +0 -21
  2775. package/kits/y2k-cromado/regras/tipografia.md +0 -17
  2776. package/lib/act.js +0 -2512
  2777. package/lib/api.js +0 -310
  2778. package/lib/boas-vindas.js +0 -153
  2779. package/lib/catalogo.js +0 -367
  2780. package/lib/checkpoint-git.js +0 -221
  2781. package/lib/checkpoint.js +0 -366
  2782. package/lib/claude-engine.js +0 -673
  2783. package/lib/codex-engine.js +0 -225
  2784. package/lib/comandos-extra.js +0 -553
  2785. package/lib/comandos.js +0 -104
  2786. package/lib/config.js +0 -414
  2787. package/lib/desktop.js +0 -756
  2788. package/lib/editor-pro-maquina.js +0 -165
  2789. package/lib/editor-pro.js +0 -930
  2790. package/lib/entrada.js +0 -1031
  2791. package/lib/entregaveis/cli.js +0 -26
  2792. package/lib/entregaveis/especialistas.js +0 -50
  2793. package/lib/entregaveis/nucleo.js +0 -111
  2794. package/lib/entregaveis/slides.js +0 -221
  2795. package/lib/estudio/acervo.js +0 -418
  2796. package/lib/estudio/assets.js +0 -497
  2797. package/lib/estudio/assinatura.js +0 -108
  2798. package/lib/estudio/conferencia-visual.js +0 -76
  2799. package/lib/estudio/cota.js +0 -157
  2800. package/lib/estudio/diretor.js +0 -392
  2801. package/lib/estudio/editor.js +0 -290
  2802. package/lib/estudio/gosto-descrever.js +0 -87
  2803. package/lib/estudio/gosto.js +0 -608
  2804. package/lib/estudio/identidade.js +0 -560
  2805. package/lib/estudio/index.js +0 -2712
  2806. package/lib/estudio/kit.js +0 -91
  2807. package/lib/estudio/kits-tela.js +0 -199
  2808. package/lib/estudio/kokoro.js +0 -127
  2809. package/lib/estudio/maquina-foto.js +0 -177
  2810. package/lib/estudio/maquina-trilha.js +0 -160
  2811. package/lib/estudio/maquina-voz.js +0 -429
  2812. package/lib/estudio/marca.js +0 -398
  2813. package/lib/estudio/materiais.js +0 -172
  2814. package/lib/estudio/morfar.js +0 -191
  2815. package/lib/estudio/print-site.js +0 -341
  2816. package/lib/estudio/projeto.js +0 -340
  2817. package/lib/estudio/projetos.js +0 -72
  2818. package/lib/exportar-conversa.js +0 -49
  2819. package/lib/headless.js +0 -102
  2820. package/lib/kits-parecidos.js +0 -99
  2821. package/lib/kits-plano.js +0 -557
  2822. package/lib/kits.js +0 -1084
  2823. package/lib/limites.js +0 -100
  2824. package/lib/linha-do-tempo.js +0 -130
  2825. package/lib/local/motor-cli.js +0 -93
  2826. package/lib/local/motor.js +0 -267
  2827. package/lib/local/provedor.js +0 -169
  2828. package/lib/marca-kit.js +0 -312
  2829. package/lib/marketplace.js +0 -189
  2830. package/lib/mcp.js +0 -819
  2831. package/lib/motioncraft.js +0 -67
  2832. package/lib/perigo.js +0 -401
  2833. package/lib/permissao.js +0 -137
  2834. package/lib/sandbox.js +0 -252
  2835. package/lib/skills.js +0 -468
  2836. package/lib/statusline.js +0 -52
  2837. package/lib/tela.js +0 -245
  2838. package/lib/tools.js +0 -1086
  2839. package/lib/ui.js +0 -763
  2840. package/lib/video/analise.js +0 -89
  2841. package/lib/video/auto.js +0 -344
  2842. package/lib/video/ops-fx.js +0 -453
  2843. package/lib/video/ops.js +0 -384
  2844. package/lib/video/pedido.js +0 -191
  2845. package/lib/video/projeto.js +0 -133
  2846. package/lib/video/rastrear.js +0 -95
  2847. package/lib/video/render.js +0 -274
  2848. package/lib/video/transcript.js +0 -124
  2849. package/lib/video/zoom.js +0 -275
  2850. package/lib/voz-ponte.js +0 -15
  2851. package/lib/voz.js +0 -532
  2852. package/materiais/saas-linear/sons/trilha.mp3 +0 -0
  2853. /package/lib/{comecar.js → cli/comecar.js} +0 -0
  2854. /package/lib/{conta.js → config/conta.js} +0 -0
  2855. /package/lib/{limite.js → config/limite.js} +0 -0
  2856. /package/lib/{protecao.js → permission/protecao.js} +0 -0
  2857. /package/lib/{entregaveis.js → plugin/entregaveis.js} +0 -0
  2858. /package/lib/{estudio → plugin/estudio}/acervo-site.js +0 -0
  2859. /package/lib/{estudio → plugin/estudio}/assinaturas/fluido.json +0 -0
  2860. /package/lib/{estudio → plugin/estudio}/assinaturas/gerativo.json +0 -0
  2861. /package/lib/{estudio → plugin/estudio}/batida.js +0 -0
  2862. /package/lib/{estudio → plugin/estudio}/biblioteca.js +0 -0
  2863. /package/lib/{estudio → plugin/estudio}/camadas.js +0 -0
  2864. /package/lib/{estudio → plugin/estudio}/cena.js +0 -0
  2865. /package/lib/{estudio → plugin/estudio}/cenarios.js +0 -0
  2866. /package/lib/{estudio → plugin/estudio}/cinema.js +0 -0
  2867. /package/lib/{estudio → plugin/estudio}/colecao.js +0 -0
  2868. /package/lib/{estudio → plugin/estudio}/composicao.js +0 -0
  2869. /package/lib/{estudio → plugin/estudio}/conferencia.js +0 -0
  2870. /package/lib/{estudio → plugin/estudio}/dados/fluent-3d.json +0 -0
  2871. /package/lib/{estudio → plugin/estudio}/dados/noto-animado.json +0 -0
  2872. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-ad5.json +0 -0
  2873. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-ae-sem-memoria.json +0 -0
  2874. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-agent.json +0 -0
  2875. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-antes-e-agora.json +0 -0
  2876. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-apresentando-clube.json +0 -0
  2877. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-bluevisa.json +0 -0
  2878. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-caught-in-the-fire.json +0 -0
  2879. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-chat-cliente-satisfeito.json +0 -0
  2880. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-chatgpt-anuncios.json +0 -0
  2881. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-claude-dj.json +0 -0
  2882. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-claude-mcp.json +0 -0
  2883. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-cleanui.json +0 -0
  2884. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-clinica-take-unico.json +0 -0
  2885. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-clinica.json +0 -0
  2886. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-clube-opener.json +0 -0
  2887. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-clube.json +0 -0
  2888. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-codigo.json +0 -0
  2889. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-distilbook.json +0 -0
  2890. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-drive-upload.json +0 -0
  2891. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-dub.json +0 -0
  2892. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-enxovaly.json +0 -0
  2893. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-fecha7.json +0 -0
  2894. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-filatov.json +0 -0
  2895. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-frame.json +0 -0
  2896. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-glass.json +0 -0
  2897. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-letra-em-apps.json +0 -0
  2898. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-letra-globo-3d.json +0 -0
  2899. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-letra-nos-apps.json +0 -0
  2900. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-letra-seis-mundos.json +0 -0
  2901. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-lula-3.json +0 -0
  2902. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-morph.json +0 -0
  2903. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-motion-designer.json +0 -0
  2904. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-motion-pacote.json +0 -0
  2905. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-movimento.json +0 -0
  2906. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-not-like-us.json +0 -0
  2907. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-pinterest-inspiracao.json +0 -0
  2908. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-pixel-e-tinta.json +0 -0
  2909. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-ponte.json +0 -0
  2910. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-processo-edit-tonal.json +0 -0
  2911. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-processo-motion-100-ia.json +0 -0
  2912. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-promo.json +0 -0
  2913. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-proposito.json +0 -0
  2914. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-rankhog.json +0 -0
  2915. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-recursao.json +0 -0
  2916. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-revelar.json +0 -0
  2917. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-robo.json +0 -0
  2918. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-shelby-ep2.json +0 -0
  2919. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-shelby.json +0 -0
  2920. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-solar-eclipse.json +0 -0
  2921. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-soldier.json +0 -0
  2922. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-som-de-cena.json +0 -0
  2923. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-spotify-candidatura.json +0 -0
  2924. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-tda-app.json +0 -0
  2925. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-tda-ia.json +0 -0
  2926. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-telegram-chat.json +0 -0
  2927. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-telegram-ilha.json +0 -0
  2928. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-tennessee-nike.json +0 -0
  2929. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-tudo-se-move.json +0 -0
  2930. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-uiad.json +0 -0
  2931. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-viralgrow.json +0 -0
  2932. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-whose-side.json +0 -0
  2933. /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-youtube-inscrever.json +0 -0
  2934. /package/lib/{estudio → plugin/estudio}/dados/projetos/elementos-do-site-em-movimento.json +0 -0
  2935. /package/lib/{estudio → plugin/estudio}/dados/projetos/explainer-narrado.json +0 -0
  2936. /package/lib/{estudio → plugin/estudio}/dados/projetos/lancamento-de-produto.json +0 -0
  2937. /package/lib/{estudio → plugin/estudio}/dados/projetos/motion-so-com-sons.json +0 -0
  2938. /package/lib/{estudio → plugin/estudio}/dados/projetos/titulo-em-after-effects.json +0 -0
  2939. /package/lib/{estudio → plugin/estudio}/dados/projetos/tour-de-saas.json +0 -0
  2940. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/antes-e-agora/ae/cenas.jsx +0 -0
  2941. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/antes-e-agora/assets/fazer_assets.py +0 -0
  2942. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-em-apps/ae/cenas.jsx +0 -0
  2943. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-em-apps/assets/preparar_assets.py +0 -0
  2944. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-em-apps/assets/svg_para_ae.py +0 -0
  2945. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/BRIEF-AGENTES.md +0 -0
  2946. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/README.md +0 -0
  2947. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ROTEIRO-CENAS.md +0 -0
  2948. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/A-agenda.jsx +0 -0
  2949. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/B-docs.jsx +0 -0
  2950. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/C-alttab.jsx +0 -0
  2951. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/D-spotify.jsx +0 -0
  2952. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/E-notas.jsx +0 -0
  2953. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/F-jornal1.jsx +0 -0
  2954. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/G-google.jsx +0 -0
  2955. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/H-mapa.jsx +0 -0
  2956. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/I-imagens.jsx +0 -0
  2957. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/J-jornal2.jsx +0 -0
  2958. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/K-maps.jsx +0 -0
  2959. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/camera-movimentos.jsx +0 -0
  2960. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/camera.jsx +0 -0
  2961. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/card-spotify.jsx +0 -0
  2962. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/digitar.jsx +0 -0
  2963. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/jornal-comum.jsx +0 -0
  2964. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/letra.jsx +0 -0
  2965. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/letra_automatica.py +0 -0
  2966. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/montagem.jsx +0 -0
  2967. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/w-agenda/render_html.py +0 -0
  2968. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/w-agenda/util.jsx +0 -0
  2969. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/w-midia-comum.jsx +0 -0
  2970. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/wg-util.jsx +0 -0
  2971. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/assets/F-jornal1/render_html.py +0 -0
  2972. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/assets/render_w-midia.py +0 -0
  2973. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/assets/w-midia-ferramentas/inclin.py +0 -0
  2974. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/assets/w-midia-ferramentas/medir_d.py +0 -0
  2975. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/assets/w-midia-ferramentas/medir_e.py +0 -0
  2976. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/ajustar_movimentos.py +0 -0
  2977. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/ancorar.py +0 -0
  2978. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/assar.py +0 -0
  2979. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/camera3d_jornal.py +0 -0
  2980. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/comparar.py +0 -0
  2981. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/dados_ae_jornal.py +0 -0
  2982. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/folha_contato.py +0 -0
  2983. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/homografia_jornal.py +0 -0
  2984. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/integrar.py +0 -0
  2985. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/medir_quadro_a_quadro.py +0 -0
  2986. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/mesa_2d.py +0 -0
  2987. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/plot_cenas.py +0 -0
  2988. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/retificar_quadros.py +0 -0
  2989. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/w-agenda/assar_ab.py +0 -0
  2990. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/w-agenda/medir_ab.py +0 -0
  2991. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/wg_ajustar_h.py +0 -0
  2992. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/wg_corrige_cam.py +0 -0
  2993. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/wg_ecc_cadeia.py +0 -0
  2994. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/wg_finalizar_cam.py +0 -0
  2995. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/wg_mosaico.py +0 -0
  2996. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/01-gramatica-e-roteiro.md +0 -0
  2997. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/02-camera.md +0 -0
  2998. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/03-montagem-no-ae.md +0 -0
  2999. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/04-render-e-conferencia.md +0 -0
  3000. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/05-abertura-celular-mergulho.md +0 -0
  3001. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces.md +0 -0
  3002. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/transicao/atraso_imagem.py +0 -0
  3003. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/transicao/fundo.py +0 -0
  3004. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/transicao/juntar.py +0 -0
  3005. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/transicao/montar.py +0 -0
  3006. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/transicao/rastreio.py +0 -0
  3007. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/transicao/sincronia.py +0 -0
  3008. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/pinterest-inspiracao/ae/cenas.jsx +0 -0
  3009. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/pinterest-inspiracao/assets/fazer_assets.py +0 -0
  3010. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/assets/pessoas/figurinha.py +0 -0
  3011. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/BRIEF-A.md +0 -0
  3012. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/audio.py +0 -0
  3013. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/confere.py +0 -0
  3014. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/dados/tempo-parte1.js +0 -0
  3015. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/dados/tempo-parte2.js +0 -0
  3016. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/gerar_emojis.py +0 -0
  3017. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/img/filmes/_indice.js +0 -0
  3018. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/js/base.js +0 -0
  3019. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/js/main.js +0 -0
  3020. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p1a.js +0 -0
  3021. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p1b.js +0 -0
  3022. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p1c.js +0 -0
  3023. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p2.js +0 -0
  3024. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/video.py +0 -0
  3025. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/take-unico/README.md +0 -0
  3026. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/take-unico/oraculo_take.py +0 -0
  3027. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/take-unico/render_take.py +0 -0
  3028. /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/take-unico/take.js +0 -0
  3029. /package/lib/{estudio → plugin/estudio}/decisao.js +0 -0
  3030. /package/lib/{estudio → plugin/estudio}/edicao.js +0 -0
  3031. /package/lib/{estudio → plugin/estudio}/efeitos-fabrica/brilho-varredura.jsx +0 -0
  3032. /package/lib/{estudio → plugin/estudio}/efeitos-fabrica/camadas-empilhadas.jsx +0 -0
  3033. /package/lib/{estudio → plugin/estudio}/efeitos-fabrica/cor-inunda.jsx +0 -0
  3034. /package/lib/{estudio → plugin/estudio}/efeitos-fabrica/mola-com-peso.jsx +0 -0
  3035. /package/lib/{estudio → plugin/estudio}/efeitos-fabrica/peca-impacto-3d.jsx +0 -0
  3036. /package/lib/{estudio → plugin/estudio}/efeitos-fabrica/raios-de-luz.jsx +0 -0
  3037. /package/lib/{estudio → plugin/estudio}/efeitos-fabrica/risco-multilinha.jsx +0 -0
  3038. /package/lib/{estudio → plugin/estudio}/efeitos-fabrica/terminal-digitando.jsx +0 -0
  3039. /package/lib/{estudio → plugin/estudio}/efeitos.js +0 -0
  3040. /package/lib/{estudio → plugin/estudio}/effectcraft.js +0 -0
  3041. /package/lib/{estudio → plugin/estudio}/ende.js +0 -0
  3042. /package/lib/{estudio → plugin/estudio}/estilo.js +0 -0
  3043. /package/lib/{estudio → plugin/estudio}/estilos.js +0 -0
  3044. /package/lib/{estudio → plugin/estudio}/exportar.js +0 -0
  3045. /package/lib/{estudio → plugin/estudio}/falantes.js +0 -0
  3046. /package/lib/{estudio → plugin/estudio}/fluido.js +0 -0
  3047. /package/lib/{estudio → plugin/estudio}/gerativo.js +0 -0
  3048. /package/lib/{estudio → plugin/estudio}/glifos.js +0 -0
  3049. /package/lib/{estudio → plugin/estudio}/gosto/tela.html +0 -0
  3050. /package/lib/{estudio → plugin/estudio}/gosto-medir.js +0 -0
  3051. /package/lib/{estudio → plugin/estudio}/gosto-prova.js +0 -0
  3052. /package/lib/{estudio → plugin/estudio}/hibrido.js +0 -0
  3053. /package/lib/{estudio → plugin/estudio}/impacto.js +0 -0
  3054. /package/lib/{estudio → plugin/estudio}/kit/animacao.jsx +0 -0
  3055. /package/lib/{estudio → plugin/estudio}/kit/base.jsx +0 -0
  3056. /package/lib/{estudio → plugin/estudio}/kit/fluido.jsx +0 -0
  3057. /package/lib/{estudio → plugin/estudio}/kit/gerativo.jsx +0 -0
  3058. /package/lib/{estudio → plugin/estudio}/kit/index.jsx +0 -0
  3059. /package/lib/{estudio → plugin/estudio}/kit/marca.jsx +0 -0
  3060. /package/lib/{estudio → plugin/estudio}/kit/mundo.jsx +0 -0
  3061. /package/lib/{estudio → plugin/estudio}/kit/natural.js +0 -0
  3062. /package/lib/{estudio → plugin/estudio}/kit/personagem.jsx +0 -0
  3063. /package/lib/{estudio → plugin/estudio}/kit/rosto.jsx +0 -0
  3064. /package/lib/{estudio → plugin/estudio}/kit/tres.jsx +0 -0
  3065. /package/lib/{estudio → plugin/estudio}/kit/vox.jsx +0 -0
  3066. /package/lib/{estudio → plugin/estudio}/kit/voxel.jsx +0 -0
  3067. /package/lib/{estudio → plugin/estudio}/kit-ae/base.jsx +0 -0
  3068. /package/lib/{estudio → plugin/estudio}/kit-ae/cenas.jsx +0 -0
  3069. /package/lib/{estudio → plugin/estudio}/kit-ae/guarda.jsx +0 -0
  3070. /package/lib/{estudio → plugin/estudio}/kit-ae/primitivas.jsx +0 -0
  3071. /package/lib/{estudio → plugin/estudio}/kits/tela.html +0 -0
  3072. /package/lib/{estudio → plugin/estudio}/lancamento.js +0 -0
  3073. /package/lib/{estudio → plugin/estudio}/legibilidade.js +0 -0
  3074. /package/lib/{estudio → plugin/estudio}/maquina-diretor.js +0 -0
  3075. /package/lib/{estudio → plugin/estudio}/maquina-elementos.js +0 -0
  3076. /package/lib/{estudio → plugin/estudio}/maquina-guarda.js +0 -0
  3077. /package/lib/{estudio → plugin/estudio}/maquina-layout.js +0 -0
  3078. /package/lib/{estudio → plugin/estudio}/maquina-som.js +0 -0
  3079. /package/lib/{estudio → plugin/estudio}/maquina.js +0 -0
  3080. /package/lib/{estudio → plugin/estudio}/margem.js +0 -0
  3081. /package/lib/{estudio → plugin/estudio}/motion.js +0 -0
  3082. /package/lib/{estudio → plugin/estudio}/movimentos.js +0 -0
  3083. /package/lib/{estudio → plugin/estudio}/mundo.js +0 -0
  3084. /package/lib/{estudio → plugin/estudio}/personagem.js +0 -0
  3085. /package/lib/{estudio → plugin/estudio}/plano.js +0 -0
  3086. /package/lib/{estudio → plugin/estudio}/producao.js +0 -0
  3087. /package/lib/{estudio → plugin/estudio}/referencias.js +0 -0
  3088. /package/lib/{estudio → plugin/estudio}/regras-motion.js +0 -0
  3089. /package/lib/{estudio → plugin/estudio}/remotion.js +0 -0
  3090. /package/lib/{estudio → plugin/estudio}/revisor.js +0 -0
  3091. /package/lib/{estudio → plugin/estudio}/ritmo.js +0 -0
  3092. /package/lib/{estudio → plugin/estudio}/sem-narracao.js +0 -0
  3093. /package/lib/{estudio → plugin/estudio}/slides.js +0 -0
  3094. /package/lib/{estudio → plugin/estudio}/sons-leves.js +0 -0
  3095. /package/lib/{estudio → plugin/estudio}/variacao3d.js +0 -0
  3096. /package/lib/{estudio → plugin/estudio}/variedade.js +0 -0
  3097. /package/lib/{estudio → plugin/estudio}/video.js +0 -0
  3098. /package/lib/{estudio → plugin/estudio}/visao/visao.swift +0 -0
  3099. /package/lib/{estudio → plugin/estudio}/visao.js +0 -0
  3100. /package/lib/{estudio → plugin/estudio}/voicestudio.js +0 -0
  3101. /package/lib/{estudio → plugin/estudio}/vox.js +0 -0
  3102. /package/lib/{video → plugin/video}/camadas.js +0 -0
  3103. /package/lib/{video → plugin/video}/cli.js +0 -0
  3104. /package/lib/{video → plugin/video}/conferir-legenda.js +0 -0
  3105. /package/lib/{video → plugin/video}/cor.js +0 -0
  3106. /package/lib/{video → plugin/video}/delta.js +0 -0
  3107. /package/lib/{video → plugin/video}/edits.js +0 -0
  3108. /package/lib/{video → plugin/video}/filters.js +0 -0
  3109. /package/lib/{video → plugin/video}/fx3d/Camadas.jsx +0 -0
  3110. /package/lib/{video → plugin/video}/fx3d/Objetos.jsx +0 -0
  3111. /package/lib/{video → plugin/video}/fx3d/Root.jsx +0 -0
  3112. /package/lib/{video → plugin/video}/fx3d/modelos.jsx +0 -0
  3113. /package/lib/{video → plugin/video}/fx3d.js +0 -0
  3114. /package/lib/{video → plugin/video}/gerados.js +0 -0
  3115. /package/lib/{video → plugin/video}/objetos.js +0 -0
  3116. /package/lib/{video → plugin/video}/paralelo.js +0 -0
  3117. /package/lib/{video → plugin/video}/rastro.js +0 -0
  3118. /package/lib/{video → plugin/video}/texto.js +0 -0
  3119. /package/lib/{video → plugin/video}/timeline.js +0 -0
  3120. /package/lib/{local → provider/local}/cerebro.json +0 -0
  3121. /package/lib/{local → provider/local}/entrada.js +0 -0
  3122. /package/lib/{encolheu.js → session/encolheu.js} +0 -0
  3123. /package/lib/{memoria-conversa.js → session/memoria-conversa.js} +0 -0
  3124. /package/lib/{retomar.js → session/retomar.js} +0 -0
  3125. /package/lib/{snapshot.js → session/snapshot.js} +0 -0
  3126. /package/lib/{titulo-conversa.js → session/titulo-conversa.js} +0 -0
  3127. /package/lib/{especialistas.js → skill/especialistas.js} +0 -0
  3128. /package/lib/{personas.js → skill/personas.js} +0 -0
  3129. /package/lib/{portao-skill.js → skill/portao-skill.js} +0 -0
  3130. /package/lib/{casar.js → tool/casar.js} +0 -0
  3131. /package/lib/{markdown.js → tui/markdown.js} +0 -0
  3132. /package/{kits/adesivos/elementos → materiais/adesivos/camera}/Camera.tsx +0 -0
  3133. /package/{kits/adesivos/assets → materiais/adesivos}/fontes/OFL-BowlbyOne.txt +0 -0
  3134. /package/{kits/adesivos/assets → materiais/adesivos}/fontes/OFL-Nunito.txt +0 -0
  3135. /package/{kits/adesivos/assets → materiais/adesivos}/fontes/bowlby-latin.woff2 +0 -0
  3136. /package/{kits/adesivos/assets → materiais/adesivos}/fontes/nunito-latin.woff2 +0 -0
  3137. /package/{kits/adesivos/assets → materiais/adesivos}/sons/assinatura.mp3 +0 -0
  3138. /package/{kits/adesivos/assets → materiais/adesivos}/sons/cola.mp3 +0 -0
  3139. /package/{kits/adesivos/assets → materiais/adesivos}/sons/confete.mp3 +0 -0
  3140. /package/{kits/adesivos/assets → materiais/adesivos}/sons/impacto.mp3 +0 -0
  3141. /package/{kits/adesivos/assets → materiais/adesivos}/sons/palavra.mp3 +0 -0
  3142. /package/{kits/adesivos/assets → materiais/adesivos}/sons/pop.mp3 +0 -0
  3143. /package/{kits/adesivos/assets → materiais/adesivos}/sons/swipe.mp3 +0 -0
  3144. /package/{kits/adesivos/assets → materiais/adesivos}/sons/whoosh.mp3 +0 -0
  3145. /package/{kits/adesivos/assets → materiais/adesivos}/trilha/pop-colorido-112bpm.mp3 +0 -0
  3146. /package/{kits/antes-depois/elementos → materiais/antes-depois/camera}/Camera.tsx +0 -0
  3147. /package/{kits/antes-depois/assets → materiais/antes-depois}/fontes/OFL-ArchivoBlack.txt +0 -0
  3148. /package/{kits/antes-depois/assets → materiais/antes-depois}/fontes/OFL-Manrope.txt +0 -0
  3149. /package/{kits/antes-depois/assets → materiais/antes-depois}/fontes/archivoblack.woff2 +0 -0
  3150. /package/{kits/antes-depois/assets → materiais/antes-depois}/fontes/manrope.woff2 +0 -0
  3151. /package/{kits/antes-depois/assets → materiais/antes-depois}/sons/assinatura.mp3 +0 -0
  3152. /package/{kits/antes-depois/assets → materiais/antes-depois}/sons/clique.mp3 +0 -0
  3153. /package/{kits/antes-depois/assets → materiais/antes-depois}/sons/impacto.mp3 +0 -0
  3154. /package/{kits/antes-depois/assets → materiais/antes-depois}/sons/pop-cartao.mp3 +0 -0
  3155. /package/{kits/antes-depois/assets → materiais/antes-depois}/sons/pop-palavra.mp3 +0 -0
  3156. /package/{kits/antes-depois/assets → materiais/antes-depois}/sons/subida.mp3 +0 -0
  3157. /package/{kits/antes-depois/assets → materiais/antes-depois}/sons/swoosh.mp3 +0 -0
  3158. /package/{kits/antes-depois/assets → materiais/antes-depois}/sons/tick.mp3 +0 -0
  3159. /package/{kits/antes-depois/assets → materiais/antes-depois}/sons/whoosh-entra.mp3 +0 -0
  3160. /package/{kits/antes-depois/assets → materiais/antes-depois}/sons/whoosh-sai.mp3 +0 -0
  3161. /package/{kits/antes-depois/assets → materiais/antes-depois}/trilha/corte-118bpm.mp3 +0 -0
  3162. /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/fontes/OFL-Inter.txt +0 -0
  3163. /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/fontes/inter-latin-500-800.woff2 +0 -0
  3164. /package/{kits/apple-tipografico/elementos → materiais/apple-tipografico/lib}/modelos.ts +0 -0
  3165. /package/{kits/apple-tipografico/elementos → materiais/apple-tipografico/lib}/raymarch.ts +0 -0
  3166. /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/sons/assinatura.mp3 +0 -0
  3167. /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/sons/clique.mp3 +0 -0
  3168. /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/sons/impacto.mp3 +0 -0
  3169. /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/sons/pop-cartao.mp3 +0 -0
  3170. /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/sons/pop-palavra.mp3 +0 -0
  3171. /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/sons/subida.mp3 +0 -0
  3172. /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/sons/swoosh.mp3 +0 -0
  3173. /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/sons/whoosh-entra.mp3 +0 -0
  3174. /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/sons/whoosh-sai.mp3 +0 -0
  3175. /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/trilha/tech-claro-125bpm.mp3 +0 -0
  3176. /package/{kits/aquarela/elementos → materiais/aquarela/camera}/Camera.tsx +0 -0
  3177. /package/{kits/aquarela/assets → materiais/aquarela}/fontes/OFL-Caveat.txt +0 -0
  3178. /package/{kits/aquarela/assets → materiais/aquarela}/fontes/OFL-Fraunces.txt +0 -0
  3179. /package/{kits/aquarela/assets → materiais/aquarela}/fontes/caveat-latin.woff2 +0 -0
  3180. /package/{kits/aquarela/assets → materiais/aquarela}/fontes/fraunces-latin.woff2 +0 -0
  3181. /package/{kits/aquarela/assets → materiais/aquarela}/sons/assinatura.mp3 +0 -0
  3182. /package/{kits/aquarela/assets → materiais/aquarela}/sons/gota.mp3 +0 -0
  3183. /package/{kits/aquarela/assets → materiais/aquarela}/sons/impacto.mp3 +0 -0
  3184. /package/{kits/aquarela/assets → materiais/aquarela}/sons/palavra.mp3 +0 -0
  3185. /package/{kits/aquarela/assets → materiais/aquarela}/sons/papel-cai.mp3 +0 -0
  3186. /package/{kits/aquarela/assets → materiais/aquarela}/sons/pop-mancha.mp3 +0 -0
  3187. /package/{kits/aquarela/assets → materiais/aquarela}/sons/risco.mp3 +0 -0
  3188. /package/{kits/aquarela/assets → materiais/aquarela}/sons/whoosh-pincel.mp3 +0 -0
  3189. /package/{kits/aquarela/assets → materiais/aquarela}/trilha/calma-com-punch-108bpm.mp3 +0 -0
  3190. /package/{kits/aurora/elementos → materiais/aurora/camera}/Camera.tsx +0 -0
  3191. /package/{kits/aurora/assets → materiais/aurora}/fontes/OFL-InstrumentSerif.txt +0 -0
  3192. /package/{kits/aurora/assets → materiais/aurora}/fontes/OFL-Manrope.txt +0 -0
  3193. /package/{kits/aurora/assets → materiais/aurora}/fontes/instrument-latin.woff2 +0 -0
  3194. /package/{kits/aurora/assets → materiais/aurora}/fontes/manrope-latin.woff2 +0 -0
  3195. /package/{kits/aurora/assets → materiais/aurora}/sons/assinatura.mp3 +0 -0
  3196. /package/{kits/aurora/assets → materiais/aurora}/sons/brilho.mp3 +0 -0
  3197. /package/{kits/aurora/assets → materiais/aurora}/sons/meteoro.mp3 +0 -0
  3198. /package/{kits/aurora/assets → materiais/aurora}/sons/onda.mp3 +0 -0
  3199. /package/{kits/aurora/assets → materiais/aurora}/sons/sino.mp3 +0 -0
  3200. /package/{kits/aurora/assets → materiais/aurora}/sons/sopro.mp3 +0 -0
  3201. /package/{kits/aurora/assets → materiais/aurora}/sons/subida.mp3 +0 -0
  3202. /package/{kits/aurora/assets → materiais/aurora}/sons/toque.mp3 +0 -0
  3203. /package/{kits/aurora/assets → materiais/aurora}/trilha/suave-88bpm.mp3 +0 -0
  3204. /package/{kits/bauhaus/assets → materiais/bauhaus}/fontes/OFL-bebas-neue.txt +0 -0
  3205. /package/{kits/bauhaus/assets → materiais/bauhaus}/fontes/OFL-jost-900.txt +0 -0
  3206. /package/{kits/bauhaus/assets → materiais/bauhaus}/fontes/bebas-neue.woff2 +0 -0
  3207. /package/{kits/bauhaus/assets → materiais/bauhaus}/fontes/jost-900.woff2 +0 -0
  3208. /package/{kits/bauhaus/assets → materiais/bauhaus}/sons/assinatura.mp3 +0 -0
  3209. /package/{kits/bauhaus/assets → materiais/bauhaus}/sons/clique.mp3 +0 -0
  3210. /package/{kits/bauhaus/assets → materiais/bauhaus}/sons/impacto.mp3 +0 -0
  3211. /package/{kits/bauhaus/assets → materiais/bauhaus}/sons/pop-cartao.mp3 +0 -0
  3212. /package/{kits/bauhaus/assets → materiais/bauhaus}/sons/pop-palavra.mp3 +0 -0
  3213. /package/{kits/bauhaus/assets → materiais/bauhaus}/sons/subida.mp3 +0 -0
  3214. /package/{kits/bauhaus/assets → materiais/bauhaus}/sons/swoosh.mp3 +0 -0
  3215. /package/{kits/bauhaus/assets → materiais/bauhaus}/sons/tick.mp3 +0 -0
  3216. /package/{kits/bauhaus/assets → materiais/bauhaus}/sons/whoosh-entra.mp3 +0 -0
  3217. /package/{kits/bauhaus/assets → materiais/bauhaus}/sons/whoosh-sai.mp3 +0 -0
  3218. /package/{kits/bauhaus/assets → materiais/bauhaus}/trilha/trilha.mp3 +0 -0
  3219. /package/{kits/brutalista/elementos → materiais/brutalista/camera}/Camera.tsx +0 -0
  3220. /package/{kits/brutalista/assets → materiais/brutalista}/fontes/OFL-ArchivoBlack.txt +0 -0
  3221. /package/{kits/brutalista/assets → materiais/brutalista}/fontes/OFL-JetBrainsMono.txt +0 -0
  3222. /package/{kits/brutalista/assets → materiais/brutalista}/fontes/archivo-black.woff2 +0 -0
  3223. /package/{kits/brutalista/assets → materiais/brutalista}/fontes/jetbrains-mono.woff2 +0 -0
  3224. /package/{kits/brutalista/assets → materiais/brutalista}/sons/assinatura.mp3 +0 -0
  3225. /package/{kits/brutalista/assets → materiais/brutalista}/sons/clique.mp3 +0 -0
  3226. /package/{kits/brutalista/assets → materiais/brutalista}/sons/impacto.mp3 +0 -0
  3227. /package/{kits/brutalista/assets → materiais/brutalista}/sons/pop-cartao.mp3 +0 -0
  3228. /package/{kits/brutalista/assets → materiais/brutalista}/sons/pop-palavra.mp3 +0 -0
  3229. /package/{kits/brutalista/assets → materiais/brutalista}/sons/subida.mp3 +0 -0
  3230. /package/{kits/brutalista/assets → materiais/brutalista}/sons/swoosh.mp3 +0 -0
  3231. /package/{kits/brutalista/assets → materiais/brutalista}/sons/whoosh-entra.mp3 +0 -0
  3232. /package/{kits/brutalista/assets → materiais/brutalista}/sons/whoosh-sai.mp3 +0 -0
  3233. /package/{kits/brutalista/assets → materiais/brutalista}/trilha/bruta-108bpm.mp3 +0 -0
  3234. /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/fontes/OFL-Archivo-Black.txt +0 -0
  3235. /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/fontes/OFL-DM-Mono.txt +0 -0
  3236. /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/fontes/OFL-Playfair-Italic.txt +0 -0
  3237. /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/fontes/archivo-black.woff2 +0 -0
  3238. /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/fontes/dm-mono.woff2 +0 -0
  3239. /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/fontes/playfair-italic.woff2 +0 -0
  3240. /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/sons/assinatura.mp3 +0 -0
  3241. /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/sons/clique.mp3 +0 -0
  3242. /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/sons/impacto.mp3 +0 -0
  3243. /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/sons/pop-cartao.mp3 +0 -0
  3244. /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/sons/pop-palavra.mp3 +0 -0
  3245. /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/sons/subida.mp3 +0 -0
  3246. /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/sons/swoosh.mp3 +0 -0
  3247. /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/sons/whoosh-entra.mp3 +0 -0
  3248. /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/sons/whoosh-sai.mp3 +0 -0
  3249. /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/trilha/trilha.mp3 +0 -0
  3250. /package/{kits/cartaz-cinetico/elementos → materiais/cartaz-cinetico/camera}/Camera.tsx +0 -0
  3251. /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/fontes/OFL-Anton.txt +0 -0
  3252. /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/fontes/OFL-Archivo.txt +0 -0
  3253. /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/fontes/anton.woff2 +0 -0
  3254. /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/fontes/archivo.woff2 +0 -0
  3255. /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/sons/assinatura.mp3 +0 -0
  3256. /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/sons/clique.mp3 +0 -0
  3257. /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/sons/impacto.mp3 +0 -0
  3258. /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/sons/pop-cartao.mp3 +0 -0
  3259. /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/sons/pop-palavra.mp3 +0 -0
  3260. /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/sons/subida.mp3 +0 -0
  3261. /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/sons/swoosh.mp3 +0 -0
  3262. /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/sons/whoosh-entra.mp3 +0 -0
  3263. /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/sons/whoosh-sai.mp3 +0 -0
  3264. /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/trilha/cartaz-124bpm.mp3 +0 -0
  3265. /package/{kits/colagem/assets → materiais/colagem}/fontes/OFL-abril-fatface.txt +0 -0
  3266. /package/{kits/colagem/assets → materiais/colagem}/fontes/OFL-special-elite.txt +0 -0
  3267. /package/{kits/colagem/assets → materiais/colagem}/fontes/abril-fatface.woff2 +0 -0
  3268. /package/{kits/colagem/assets → materiais/colagem}/fontes/special-elite.woff2 +0 -0
  3269. /package/{kits/colagem/elementos → materiais/colagem/formas}/Overlay.tsx +0 -0
  3270. /package/{kits/colagem/assets → materiais/colagem}/sons/assinatura.mp3 +0 -0
  3271. /package/{kits/colagem/assets → materiais/colagem}/sons/clique.mp3 +0 -0
  3272. /package/{kits/colagem/assets → materiais/colagem}/sons/impacto.mp3 +0 -0
  3273. /package/{kits/colagem/assets → materiais/colagem}/sons/pop-cartao.mp3 +0 -0
  3274. /package/{kits/colagem/assets → materiais/colagem}/sons/pop-palavra.mp3 +0 -0
  3275. /package/{kits/colagem/assets → materiais/colagem}/sons/subida.mp3 +0 -0
  3276. /package/{kits/colagem/assets → materiais/colagem}/sons/swoosh.mp3 +0 -0
  3277. /package/{kits/colagem/assets → materiais/colagem}/sons/tick.mp3 +0 -0
  3278. /package/{kits/colagem/assets → materiais/colagem}/sons/whoosh-entra.mp3 +0 -0
  3279. /package/{kits/colagem/assets → materiais/colagem}/sons/whoosh-sai.mp3 +0 -0
  3280. /package/{kits/colagem/assets → materiais/colagem}/trilha/trilha.mp3 +0 -0
  3281. /package/{kits/contagem/elementos → materiais/contagem/camera}/Camera.tsx +0 -0
  3282. /package/{kits/contagem/assets → materiais/contagem}/fontes/OFL-BigShouldersDisplay.txt +0 -0
  3283. /package/{kits/contagem/assets → materiais/contagem}/fontes/OFL-SpaceMono.txt +0 -0
  3284. /package/{kits/contagem/assets → materiais/contagem}/fontes/bigshoulders.woff2 +0 -0
  3285. /package/{kits/contagem/assets → materiais/contagem}/fontes/spacemono.woff2 +0 -0
  3286. /package/{kits/contagem/assets → materiais/contagem}/sons/assinatura.mp3 +0 -0
  3287. /package/{kits/contagem/assets → materiais/contagem}/sons/clique.mp3 +0 -0
  3288. /package/{kits/contagem/assets → materiais/contagem}/sons/confete.mp3 +0 -0
  3289. /package/{kits/contagem/assets → materiais/contagem}/sons/impacto.mp3 +0 -0
  3290. /package/{kits/contagem/assets → materiais/contagem}/sons/pop-cartao.mp3 +0 -0
  3291. /package/{kits/contagem/assets → materiais/contagem}/sons/pop-palavra.mp3 +0 -0
  3292. /package/{kits/contagem/assets → materiais/contagem}/sons/subida.mp3 +0 -0
  3293. /package/{kits/contagem/assets → materiais/contagem}/sons/swoosh.mp3 +0 -0
  3294. /package/{kits/contagem/assets → materiais/contagem}/sons/tick.mp3 +0 -0
  3295. /package/{kits/contagem/assets → materiais/contagem}/sons/whoosh-entra.mp3 +0 -0
  3296. /package/{kits/contagem/assets → materiais/contagem}/sons/whoosh-sai.mp3 +0 -0
  3297. /package/{kits/contagem/assets → materiais/contagem}/trilha/pulso-128bpm.mp3 +0 -0
  3298. /package/{kits/convite-evento/elementos → materiais/convite-evento/camera}/Camera.tsx +0 -0
  3299. /package/{kits/convite-evento/assets → materiais/convite-evento}/fontes/OFL-InstrumentSerif.txt +0 -0
  3300. /package/{kits/convite-evento/assets → materiais/convite-evento}/fontes/OFL-Unbounded.txt +0 -0
  3301. /package/{kits/convite-evento/assets → materiais/convite-evento}/fontes/instrumentserif-i.woff2 +0 -0
  3302. /package/{kits/convite-evento/assets → materiais/convite-evento}/fontes/unbounded.woff2 +0 -0
  3303. /package/{kits/convite-evento/assets → materiais/convite-evento}/sons/assinatura.mp3 +0 -0
  3304. /package/{kits/convite-evento/assets → materiais/convite-evento}/sons/clique.mp3 +0 -0
  3305. /package/{kits/convite-evento/assets → materiais/convite-evento}/sons/confete.mp3 +0 -0
  3306. /package/{kits/convite-evento/assets → materiais/convite-evento}/sons/impacto.mp3 +0 -0
  3307. /package/{kits/convite-evento/assets → materiais/convite-evento}/sons/pop-cartao.mp3 +0 -0
  3308. /package/{kits/convite-evento/assets → materiais/convite-evento}/sons/pop-palavra.mp3 +0 -0
  3309. /package/{kits/convite-evento/assets → materiais/convite-evento}/sons/subida.mp3 +0 -0
  3310. /package/{kits/convite-evento/assets → materiais/convite-evento}/sons/swoosh.mp3 +0 -0
  3311. /package/{kits/convite-evento/assets → materiais/convite-evento}/sons/whoosh-entra.mp3 +0 -0
  3312. /package/{kits/convite-evento/assets → materiais/convite-evento}/sons/whoosh-sai.mp3 +0 -0
  3313. /package/{kits/convite-evento/assets → materiais/convite-evento}/trilha/festa-112bpm.mp3 +0 -0
  3314. /package/{kits/corte-podcast/elementos → materiais/corte-podcast/camera}/Camera.tsx +0 -0
  3315. /package/{kits/corte-podcast/assets → materiais/corte-podcast}/fontes/OFL-Anton.txt +0 -0
  3316. /package/{kits/corte-podcast/assets → materiais/corte-podcast}/fontes/OFL-IBMPlexMono.txt +0 -0
  3317. /package/{kits/corte-podcast/assets → materiais/corte-podcast}/fontes/anton.woff2 +0 -0
  3318. /package/{kits/corte-podcast/assets → materiais/corte-podcast}/fontes/plexmono.woff2 +0 -0
  3319. /package/{kits/corte-podcast/assets → materiais/corte-podcast}/sons/assinatura.mp3 +0 -0
  3320. /package/{kits/corte-podcast/assets → materiais/corte-podcast}/sons/clique.mp3 +0 -0
  3321. /package/{kits/corte-podcast/assets → materiais/corte-podcast}/sons/impacto.mp3 +0 -0
  3322. /package/{kits/corte-podcast/assets → materiais/corte-podcast}/sons/pop-cartao.mp3 +0 -0
  3323. /package/{kits/corte-podcast/assets → materiais/corte-podcast}/sons/pop-palavra.mp3 +0 -0
  3324. /package/{kits/corte-podcast/assets → materiais/corte-podcast}/sons/subida.mp3 +0 -0
  3325. /package/{kits/corte-podcast/assets → materiais/corte-podcast}/sons/swoosh.mp3 +0 -0
  3326. /package/{kits/corte-podcast/assets → materiais/corte-podcast}/sons/tick.mp3 +0 -0
  3327. /package/{kits/corte-podcast/assets → materiais/corte-podcast}/sons/whoosh-entra.mp3 +0 -0
  3328. /package/{kits/corte-podcast/assets → materiais/corte-podcast}/sons/whoosh-sai.mp3 +0 -0
  3329. /package/{kits/corte-podcast/assets → materiais/corte-podcast}/trilha/lofi-pulso-100bpm.mp3 +0 -0
  3330. /package/{kits/cubos/elementos → materiais/cubos/camera}/Camera.tsx +0 -0
  3331. /package/{kits/cubos/assets → materiais/cubos}/fontes/OFL-ArchivoBlack.txt +0 -0
  3332. /package/{kits/cubos/assets → materiais/cubos}/fontes/OFL-DMSans.txt +0 -0
  3333. /package/{kits/cubos/assets → materiais/cubos}/fontes/archivoblack-latin.woff2 +0 -0
  3334. /package/{kits/cubos/assets → materiais/cubos}/fontes/dmsans-latin.woff2 +0 -0
  3335. /package/{kits/cubos/assets → materiais/cubos}/sons/assinatura.mp3 +0 -0
  3336. /package/{kits/cubos/assets → materiais/cubos}/sons/bloco.mp3 +0 -0
  3337. /package/{kits/cubos/assets → materiais/cubos}/sons/desmonta.mp3 +0 -0
  3338. /package/{kits/cubos/assets → materiais/cubos}/sons/encaixa.mp3 +0 -0
  3339. /package/{kits/cubos/assets → materiais/cubos}/sons/estala.mp3 +0 -0
  3340. /package/{kits/cubos/assets → materiais/cubos}/sons/gira.mp3 +0 -0
  3341. /package/{kits/cubos/assets → materiais/cubos}/sons/queda.mp3 +0 -0
  3342. /package/{kits/cubos/assets → materiais/cubos}/sons/whoosh.mp3 +0 -0
  3343. /package/{kits/cubos/assets → materiais/cubos}/trilha/calma-com-punch-108bpm.mp3 +0 -0
  3344. /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/fontes/OFL-IBM-Plex-Mono.txt +0 -0
  3345. /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/fontes/OFL-Montserrat.txt +0 -0
  3346. /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/fontes/montserrat.woff2 +0 -0
  3347. /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/fontes/plex-mono.woff2 +0 -0
  3348. /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/sons/assinatura.mp3 +0 -0
  3349. /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/sons/clique.mp3 +0 -0
  3350. /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/sons/impacto.mp3 +0 -0
  3351. /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/sons/pop-cartao.mp3 +0 -0
  3352. /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/sons/pop-palavra.mp3 +0 -0
  3353. /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/sons/subida.mp3 +0 -0
  3354. /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/sons/swoosh.mp3 +0 -0
  3355. /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/sons/whoosh-entra.mp3 +0 -0
  3356. /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/sons/whoosh-sai.mp3 +0 -0
  3357. /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/trilha/trilha.mp3 +0 -0
  3358. /package/{kits/depoimento/elementos → materiais/depoimento/camera}/Camera.tsx +0 -0
  3359. /package/{kits/depoimento/assets → materiais/depoimento}/fontes/OFL-Newsreader.txt +0 -0
  3360. /package/{kits/depoimento/assets → materiais/depoimento}/fontes/OFL-SpaceGrotesk.txt +0 -0
  3361. /package/{kits/depoimento/assets → materiais/depoimento}/fontes/newsreader-i.woff2 +0 -0
  3362. /package/{kits/depoimento/assets → materiais/depoimento}/fontes/spacegrotesk.woff2 +0 -0
  3363. /package/{kits/depoimento/assets → materiais/depoimento}/sons/assinatura.mp3 +0 -0
  3364. /package/{kits/depoimento/assets → materiais/depoimento}/sons/clique.mp3 +0 -0
  3365. /package/{kits/depoimento/assets → materiais/depoimento}/sons/estrela.mp3 +0 -0
  3366. /package/{kits/depoimento/assets → materiais/depoimento}/sons/impacto.mp3 +0 -0
  3367. /package/{kits/depoimento/assets → materiais/depoimento}/sons/pop-cartao.mp3 +0 -0
  3368. /package/{kits/depoimento/assets → materiais/depoimento}/sons/pop-palavra.mp3 +0 -0
  3369. /package/{kits/depoimento/assets → materiais/depoimento}/sons/subida.mp3 +0 -0
  3370. /package/{kits/depoimento/assets → materiais/depoimento}/sons/swoosh.mp3 +0 -0
  3371. /package/{kits/depoimento/assets → materiais/depoimento}/sons/verificado.mp3 +0 -0
  3372. /package/{kits/depoimento/assets → materiais/depoimento}/sons/whoosh-entra.mp3 +0 -0
  3373. /package/{kits/depoimento/assets → materiais/depoimento}/sons/whoosh-sai.mp3 +0 -0
  3374. /package/{kits/depoimento/assets → materiais/depoimento}/trilha/calor-104bpm.mp3 +0 -0
  3375. /package/{kits/infografico/elementos → materiais/infografico/camera}/Camera.tsx +0 -0
  3376. /package/{kits/infografico/assets → materiais/infografico}/fontes/OFL-Caveat.txt +0 -0
  3377. /package/{kits/infografico/assets → materiais/infografico}/fontes/OFL-Outfit.txt +0 -0
  3378. /package/{kits/infografico/assets → materiais/infografico}/fontes/caveat.woff2 +0 -0
  3379. /package/{kits/infografico/assets → materiais/infografico}/fontes/outfit.woff2 +0 -0
  3380. /package/{kits/infografico/assets → materiais/infografico}/sons/assinatura.mp3 +0 -0
  3381. /package/{kits/infografico/assets → materiais/infografico}/sons/clique.mp3 +0 -0
  3382. /package/{kits/infografico/assets → materiais/infografico}/sons/impacto.mp3 +0 -0
  3383. /package/{kits/infografico/assets → materiais/infografico}/sons/pop-cartao.mp3 +0 -0
  3384. /package/{kits/infografico/assets → materiais/infografico}/sons/pop-palavra.mp3 +0 -0
  3385. /package/{kits/infografico/assets → materiais/infografico}/sons/subida.mp3 +0 -0
  3386. /package/{kits/infografico/assets → materiais/infografico}/sons/swoosh.mp3 +0 -0
  3387. /package/{kits/infografico/assets → materiais/infografico}/sons/traco.mp3 +0 -0
  3388. /package/{kits/infografico/assets → materiais/infografico}/sons/whoosh-entra.mp3 +0 -0
  3389. /package/{kits/infografico/assets → materiais/infografico}/sons/whoosh-sai.mp3 +0 -0
  3390. /package/{kits/infografico/assets → materiais/infografico}/trilha/explica-100bpm.mp3 +0 -0
  3391. /package/{kits/isometrico/assets → materiais/isometrico}/fontes/OFL-Archivo.txt +0 -0
  3392. /package/{kits/isometrico/assets → materiais/isometrico}/fontes/OFL-Jost.txt +0 -0
  3393. /package/{kits/isometrico/assets → materiais/isometrico}/fontes/archivo.woff2 +0 -0
  3394. /package/{kits/isometrico/assets → materiais/isometrico}/fontes/jost.woff2 +0 -0
  3395. /package/{kits/isometrico/elementos → materiais/isometrico/formas}/iso.tsx +0 -0
  3396. /package/{kits/isometrico/assets → materiais/isometrico}/sons/assinatura.mp3 +0 -0
  3397. /package/{kits/isometrico/assets → materiais/isometrico}/sons/clique.mp3 +0 -0
  3398. /package/{kits/isometrico/assets → materiais/isometrico}/sons/impacto.mp3 +0 -0
  3399. /package/{kits/isometrico/assets → materiais/isometrico}/sons/pop-cartao.mp3 +0 -0
  3400. /package/{kits/isometrico/assets → materiais/isometrico}/sons/pop-palavra.mp3 +0 -0
  3401. /package/{kits/isometrico/assets → materiais/isometrico}/sons/subida.mp3 +0 -0
  3402. /package/{kits/isometrico/assets → materiais/isometrico}/sons/swoosh.mp3 +0 -0
  3403. /package/{kits/isometrico/assets → materiais/isometrico}/sons/whoosh-entra.mp3 +0 -0
  3404. /package/{kits/isometrico/assets → materiais/isometrico}/sons/whoosh-sai.mp3 +0 -0
  3405. /package/{kits/isometrico/assets → materiais/isometrico}/trilha/trilha.mp3 +0 -0
  3406. /package/{kits/jornal/elementos → materiais/jornal/camera}/Camera.tsx +0 -0
  3407. /package/{kits/jornal/assets → materiais/jornal}/fontes/OFL-PlayfairDisplay.txt +0 -0
  3408. /package/{kits/jornal/assets → materiais/jornal}/fontes/OFL-UnifrakturMaguntia.txt +0 -0
  3409. /package/{kits/jornal/assets → materiais/jornal}/fontes/playfair-italic.woff2 +0 -0
  3410. /package/{kits/jornal/assets → materiais/jornal}/fontes/playfair.woff2 +0 -0
  3411. /package/{kits/jornal/assets → materiais/jornal}/fontes/unifraktur.woff2 +0 -0
  3412. /package/{kits/jornal/assets → materiais/jornal}/sons/assinatura.mp3 +0 -0
  3413. /package/{kits/jornal/assets → materiais/jornal}/sons/clique.mp3 +0 -0
  3414. /package/{kits/jornal/assets → materiais/jornal}/sons/impacto.mp3 +0 -0
  3415. /package/{kits/jornal/assets → materiais/jornal}/sons/pop-cartao.mp3 +0 -0
  3416. /package/{kits/jornal/assets → materiais/jornal}/sons/pop-palavra.mp3 +0 -0
  3417. /package/{kits/jornal/assets → materiais/jornal}/sons/subida.mp3 +0 -0
  3418. /package/{kits/jornal/assets → materiais/jornal}/sons/swoosh.mp3 +0 -0
  3419. /package/{kits/jornal/assets → materiais/jornal}/sons/whoosh-entra.mp3 +0 -0
  3420. /package/{kits/jornal/assets → materiais/jornal}/sons/whoosh-sai.mp3 +0 -0
  3421. /package/{kits/jornal/assets → materiais/jornal}/trilha/redacao-96bpm.mp3 +0 -0
  3422. /package/{kits/legenda-viva/elementos → materiais/legenda-viva/camera}/Camera.tsx +0 -0
  3423. /package/{kits/legenda-viva/assets → materiais/legenda-viva}/fontes/OFL-Inter.txt +0 -0
  3424. /package/{kits/legenda-viva/assets → materiais/legenda-viva}/fontes/OFL-Montserrat.txt +0 -0
  3425. /package/{kits/legenda-viva/assets → materiais/legenda-viva}/fontes/inter.woff2 +0 -0
  3426. /package/{kits/legenda-viva/assets → materiais/legenda-viva}/fontes/montserrat.woff2 +0 -0
  3427. /package/{kits/legenda-viva/assets → materiais/legenda-viva}/sons/assinatura.mp3 +0 -0
  3428. /package/{kits/legenda-viva/assets → materiais/legenda-viva}/sons/clique.mp3 +0 -0
  3429. /package/{kits/legenda-viva/assets → materiais/legenda-viva}/sons/impacto.mp3 +0 -0
  3430. /package/{kits/legenda-viva/assets → materiais/legenda-viva}/sons/pop-cartao.mp3 +0 -0
  3431. /package/{kits/legenda-viva/assets → materiais/legenda-viva}/sons/pop-palavra.mp3 +0 -0
  3432. /package/{kits/legenda-viva/assets → materiais/legenda-viva}/sons/subida.mp3 +0 -0
  3433. /package/{kits/legenda-viva/assets → materiais/legenda-viva}/sons/swoosh.mp3 +0 -0
  3434. /package/{kits/legenda-viva/assets → materiais/legenda-viva}/sons/whoosh-entra.mp3 +0 -0
  3435. /package/{kits/legenda-viva/assets → materiais/legenda-viva}/sons/whoosh-sai.mp3 +0 -0
  3436. /package/{kits/legenda-viva/assets → materiais/legenda-viva}/trilha/voz-118bpm.mp3 +0 -0
  3437. /package/{kits/luxo/elementos → materiais/luxo/camera}/Camera.tsx +0 -0
  3438. /package/{kits/luxo/assets → materiais/luxo}/fontes/OFL-CormorantGaramond.txt +0 -0
  3439. /package/{kits/luxo/assets → materiais/luxo}/fontes/OFL-Jost.txt +0 -0
  3440. /package/{kits/luxo/assets → materiais/luxo}/fontes/cormorant-i.woff2 +0 -0
  3441. /package/{kits/luxo/assets → materiais/luxo}/fontes/cormorant.woff2 +0 -0
  3442. /package/{kits/luxo/assets → materiais/luxo}/fontes/jost.woff2 +0 -0
  3443. /package/{kits/luxo/assets → materiais/luxo}/sons/assinatura.mp3 +0 -0
  3444. /package/{kits/luxo/assets → materiais/luxo}/sons/clique.mp3 +0 -0
  3445. /package/{kits/luxo/assets → materiais/luxo}/sons/impacto.mp3 +0 -0
  3446. /package/{kits/luxo/assets → materiais/luxo}/sons/pop-cartao.mp3 +0 -0
  3447. /package/{kits/luxo/assets → materiais/luxo}/sons/pop-palavra.mp3 +0 -0
  3448. /package/{kits/luxo/assets → materiais/luxo}/sons/sino.mp3 +0 -0
  3449. /package/{kits/luxo/assets → materiais/luxo}/sons/subida.mp3 +0 -0
  3450. /package/{kits/luxo/assets → materiais/luxo}/sons/swoosh.mp3 +0 -0
  3451. /package/{kits/luxo/assets → materiais/luxo}/sons/whoosh-entra.mp3 +0 -0
  3452. /package/{kits/luxo/assets → materiais/luxo}/sons/whoosh-sai.mp3 +0 -0
  3453. /package/{kits/luxo/assets → materiais/luxo}/trilha/ambar-78bpm.mp3 +0 -0
  3454. /package/{kits/mapa/elementos → materiais/mapa/camera}/Camera.tsx +0 -0
  3455. /package/{kits/mapa/assets → materiais/mapa}/fontes/OFL-DMMono.txt +0 -0
  3456. /package/{kits/mapa/assets → materiais/mapa}/fontes/OFL-DMSans.txt +0 -0
  3457. /package/{kits/mapa/assets → materiais/mapa}/fontes/dmmono.woff2 +0 -0
  3458. /package/{kits/mapa/assets → materiais/mapa}/fontes/dmsans.woff2 +0 -0
  3459. /package/{kits/mapa/assets → materiais/mapa}/sons/assinatura.mp3 +0 -0
  3460. /package/{kits/mapa/assets → materiais/mapa}/sons/clique.mp3 +0 -0
  3461. /package/{kits/mapa/assets → materiais/mapa}/sons/impacto.mp3 +0 -0
  3462. /package/{kits/mapa/assets → materiais/mapa}/sons/pop-cartao.mp3 +0 -0
  3463. /package/{kits/mapa/assets → materiais/mapa}/sons/pop-palavra.mp3 +0 -0
  3464. /package/{kits/mapa/assets → materiais/mapa}/sons/quique.mp3 +0 -0
  3465. /package/{kits/mapa/assets → materiais/mapa}/sons/subida.mp3 +0 -0
  3466. /package/{kits/mapa/assets → materiais/mapa}/sons/swoosh.mp3 +0 -0
  3467. /package/{kits/mapa/assets → materiais/mapa}/sons/traco.mp3 +0 -0
  3468. /package/{kits/mapa/assets → materiais/mapa}/sons/whoosh-entra.mp3 +0 -0
  3469. /package/{kits/mapa/assets → materiais/mapa}/sons/whoosh-sai.mp3 +0 -0
  3470. /package/{kits/mapa/assets → materiais/mapa}/trilha/rota-100bpm.mp3 +0 -0
  3471. /package/{kits/massinha/assets → materiais/massinha}/fontes/OFL-chewy.txt +0 -0
  3472. /package/{kits/massinha/assets → materiais/massinha}/fontes/OFL-nunito-800.txt +0 -0
  3473. /package/{kits/massinha/assets → materiais/massinha}/fontes/chewy.woff2 +0 -0
  3474. /package/{kits/massinha/assets → materiais/massinha}/fontes/nunito-800.woff2 +0 -0
  3475. /package/{kits/massinha/elementos → materiais/massinha/lib}/argila.ts +0 -0
  3476. /package/{kits/massinha/assets → materiais/massinha}/sons/assinatura.mp3 +0 -0
  3477. /package/{kits/massinha/assets → materiais/massinha}/sons/clique.mp3 +0 -0
  3478. /package/{kits/massinha/assets → materiais/massinha}/sons/impacto.mp3 +0 -0
  3479. /package/{kits/massinha/assets → materiais/massinha}/sons/pop-cartao.mp3 +0 -0
  3480. /package/{kits/massinha/assets → materiais/massinha}/sons/pop-palavra.mp3 +0 -0
  3481. /package/{kits/massinha/assets → materiais/massinha}/sons/subida.mp3 +0 -0
  3482. /package/{kits/massinha/assets → materiais/massinha}/sons/swoosh.mp3 +0 -0
  3483. /package/{kits/massinha/assets → materiais/massinha}/sons/tick.mp3 +0 -0
  3484. /package/{kits/massinha/assets → materiais/massinha}/sons/whoosh-entra.mp3 +0 -0
  3485. /package/{kits/massinha/assets → materiais/massinha}/sons/whoosh-sai.mp3 +0 -0
  3486. /package/{kits/massinha/assets → materiais/massinha}/trilha/trilha.mp3 +0 -0
  3487. /package/{kits/memphis/assets → materiais/memphis}/fontes/OFL-bowlby-one.txt +0 -0
  3488. /package/{kits/memphis/assets → materiais/memphis}/fontes/OFL-dm-sans-800.txt +0 -0
  3489. /package/{kits/memphis/assets → materiais/memphis}/fontes/bowlby-one.woff2 +0 -0
  3490. /package/{kits/memphis/assets → materiais/memphis}/fontes/dm-sans-800.woff2 +0 -0
  3491. /package/{kits/memphis/assets → materiais/memphis}/sons/assinatura.mp3 +0 -0
  3492. /package/{kits/memphis/assets → materiais/memphis}/sons/clique.mp3 +0 -0
  3493. /package/{kits/memphis/assets → materiais/memphis}/sons/impacto.mp3 +0 -0
  3494. /package/{kits/memphis/assets → materiais/memphis}/sons/pop-cartao.mp3 +0 -0
  3495. /package/{kits/memphis/assets → materiais/memphis}/sons/pop-palavra.mp3 +0 -0
  3496. /package/{kits/memphis/assets → materiais/memphis}/sons/subida.mp3 +0 -0
  3497. /package/{kits/memphis/assets → materiais/memphis}/sons/swoosh.mp3 +0 -0
  3498. /package/{kits/memphis/assets → materiais/memphis}/sons/tick.mp3 +0 -0
  3499. /package/{kits/memphis/assets → materiais/memphis}/sons/whoosh-entra.mp3 +0 -0
  3500. /package/{kits/memphis/assets → materiais/memphis}/sons/whoosh-sai.mp3 +0 -0
  3501. /package/{kits/memphis/assets → materiais/memphis}/trilha/trilha.mp3 +0 -0
  3502. /package/{kits/metal-liquido/elementos → materiais/metal-liquido/camera}/Camera.tsx +0 -0
  3503. /package/{kits/metal-liquido/assets → materiais/metal-liquido}/fontes/OFL-SpaceGrotesk.txt +0 -0
  3504. /package/{kits/metal-liquido/assets → materiais/metal-liquido}/fontes/OFL-Unbounded.txt +0 -0
  3505. /package/{kits/metal-liquido/assets → materiais/metal-liquido}/fontes/grotesk-latin.woff2 +0 -0
  3506. /package/{kits/metal-liquido/assets → materiais/metal-liquido}/fontes/unbounded-latin.woff2 +0 -0
  3507. /package/{kits/metal-liquido/assets → materiais/metal-liquido}/sons/assinatura.mp3 +0 -0
  3508. /package/{kits/metal-liquido/assets → materiais/metal-liquido}/sons/clique.mp3 +0 -0
  3509. /package/{kits/metal-liquido/assets → materiais/metal-liquido}/sons/cromo.mp3 +0 -0
  3510. /package/{kits/metal-liquido/assets → materiais/metal-liquido}/sons/liquido.mp3 +0 -0
  3511. /package/{kits/metal-liquido/assets → materiais/metal-liquido}/sons/quique.mp3 +0 -0
  3512. /package/{kits/metal-liquido/assets → materiais/metal-liquido}/sons/subida.mp3 +0 -0
  3513. /package/{kits/metal-liquido/assets → materiais/metal-liquido}/sons/varre.mp3 +0 -0
  3514. /package/{kits/metal-liquido/assets → materiais/metal-liquido}/sons/whoosh.mp3 +0 -0
  3515. /package/{kits/metal-liquido/assets → materiais/metal-liquido}/trilha/sombrio-114bpm.mp3 +0 -0
  3516. /package/{kits/minimal/elementos → materiais/minimal/camera}/Camera.tsx +0 -0
  3517. /package/{kits/minimal/assets → materiais/minimal}/fontes/OFL-HankenGrotesk.txt +0 -0
  3518. /package/{kits/minimal/assets → materiais/minimal}/fontes/OFL-SplineSansMono.txt +0 -0
  3519. /package/{kits/minimal/assets → materiais/minimal}/fontes/hanken.woff2 +0 -0
  3520. /package/{kits/minimal/assets → materiais/minimal}/fontes/splinemono.woff2 +0 -0
  3521. /package/{kits/minimal/assets → materiais/minimal}/sons/assinatura.mp3 +0 -0
  3522. /package/{kits/minimal/assets → materiais/minimal}/sons/clique.mp3 +0 -0
  3523. /package/{kits/minimal/assets → materiais/minimal}/sons/impacto.mp3 +0 -0
  3524. /package/{kits/minimal/assets → materiais/minimal}/sons/pop-cartao.mp3 +0 -0
  3525. /package/{kits/minimal/assets → materiais/minimal}/sons/pop-palavra.mp3 +0 -0
  3526. /package/{kits/minimal/assets → materiais/minimal}/sons/subida.mp3 +0 -0
  3527. /package/{kits/minimal/assets → materiais/minimal}/sons/swoosh.mp3 +0 -0
  3528. /package/{kits/minimal/assets → materiais/minimal}/sons/toque.mp3 +0 -0
  3529. /package/{kits/minimal/assets → materiais/minimal}/sons/whoosh-entra.mp3 +0 -0
  3530. /package/{kits/minimal/assets → materiais/minimal}/sons/whoosh-sai.mp3 +0 -0
  3531. /package/{kits/minimal/assets → materiais/minimal}/trilha/vazio-90bpm.mp3 +0 -0
  3532. /package/{kits/neon-cidade/elementos → materiais/neon-cidade/camera}/Camera.tsx +0 -0
  3533. /package/{kits/neon-cidade/assets → materiais/neon-cidade}/fontes/OFL-BarlowCondensed.txt +0 -0
  3534. /package/{kits/neon-cidade/assets → materiais/neon-cidade}/fontes/OFL-TiltNeon.txt +0 -0
  3535. /package/{kits/neon-cidade/assets → materiais/neon-cidade}/fontes/barlow-latin.woff2 +0 -0
  3536. /package/{kits/neon-cidade/assets → materiais/neon-cidade}/fontes/tiltneon-latin.woff2 +0 -0
  3537. /package/{kits/neon-cidade/assets → materiais/neon-cidade}/sons/assinatura.mp3 +0 -0
  3538. /package/{kits/neon-cidade/assets → materiais/neon-cidade}/sons/balanca.mp3 +0 -0
  3539. /package/{kits/neon-cidade/assets → materiais/neon-cidade}/sons/clique.mp3 +0 -0
  3540. /package/{kits/neon-cidade/assets → materiais/neon-cidade}/sons/impacto.mp3 +0 -0
  3541. /package/{kits/neon-cidade/assets → materiais/neon-cidade}/sons/liga.mp3 +0 -0
  3542. /package/{kits/neon-cidade/assets → materiais/neon-cidade}/sons/tick.mp3 +0 -0
  3543. /package/{kits/neon-cidade/assets → materiais/neon-cidade}/sons/whoosh.mp3 +0 -0
  3544. /package/{kits/neon-cidade/assets → materiais/neon-cidade}/sons/zumbido.mp3 +0 -0
  3545. /package/{kits/neon-cidade/assets → materiais/neon-cidade}/trilha/noite-100bpm.mp3 +0 -0
  3546. /package/{kits/notion-editorial/assets → materiais/notion-editorial}/fontes/OFL-Cormorant-Italic.txt +0 -0
  3547. /package/{kits/notion-editorial/assets → materiais/notion-editorial}/fontes/OFL-Cormorant.txt +0 -0
  3548. /package/{kits/notion-editorial/assets → materiais/notion-editorial}/fontes/OFL-Jost.txt +0 -0
  3549. /package/{kits/notion-editorial/assets → materiais/notion-editorial}/fontes/cormorant-italic.woff2 +0 -0
  3550. /package/{kits/notion-editorial/assets → materiais/notion-editorial}/fontes/cormorant.woff2 +0 -0
  3551. /package/{kits/notion-editorial/assets → materiais/notion-editorial}/fontes/jost.woff2 +0 -0
  3552. /package/{kits/notion-editorial/elementos → materiais/notion-editorial/formas}/desenho.tsx +0 -0
  3553. /package/{kits/notion-editorial/assets → materiais/notion-editorial}/sons/assinatura.mp3 +0 -0
  3554. /package/{kits/notion-editorial/assets → materiais/notion-editorial}/sons/clique.mp3 +0 -0
  3555. /package/{kits/notion-editorial/assets → materiais/notion-editorial}/sons/impacto.mp3 +0 -0
  3556. /package/{kits/notion-editorial/assets → materiais/notion-editorial}/sons/pop-cartao.mp3 +0 -0
  3557. /package/{kits/notion-editorial/assets → materiais/notion-editorial}/sons/pop-palavra.mp3 +0 -0
  3558. /package/{kits/notion-editorial/assets → materiais/notion-editorial}/sons/subida.mp3 +0 -0
  3559. /package/{kits/notion-editorial/assets → materiais/notion-editorial}/sons/swoosh.mp3 +0 -0
  3560. /package/{kits/notion-editorial/assets → materiais/notion-editorial}/sons/whoosh-entra.mp3 +0 -0
  3561. /package/{kits/notion-editorial/assets → materiais/notion-editorial}/sons/whoosh-sai.mp3 +0 -0
  3562. /package/{kits/notion-editorial/assets → materiais/notion-editorial}/trilha/trilha.mp3 +0 -0
  3563. /package/{kits/papel-recortado/assets → materiais/papel-recortado}/fontes/OFL-fredoka-700.txt +0 -0
  3564. /package/{kits/papel-recortado/assets → materiais/papel-recortado}/fontes/OFL-nunito-700.txt +0 -0
  3565. /package/{kits/papel-recortado/assets → materiais/papel-recortado}/fontes/fredoka-700.woff2 +0 -0
  3566. /package/{kits/papel-recortado/assets → materiais/papel-recortado}/fontes/nunito-700.woff2 +0 -0
  3567. /package/{kits/papel-recortado/elementos → materiais/papel-recortado/formas}/Filtros.tsx +0 -0
  3568. /package/{kits/papel-recortado/assets → materiais/papel-recortado}/sons/assinatura.mp3 +0 -0
  3569. /package/{kits/papel-recortado/assets → materiais/papel-recortado}/sons/clique.mp3 +0 -0
  3570. /package/{kits/papel-recortado/assets → materiais/papel-recortado}/sons/impacto.mp3 +0 -0
  3571. /package/{kits/papel-recortado/assets → materiais/papel-recortado}/sons/pop-cartao.mp3 +0 -0
  3572. /package/{kits/papel-recortado/assets → materiais/papel-recortado}/sons/pop-palavra.mp3 +0 -0
  3573. /package/{kits/papel-recortado/assets → materiais/papel-recortado}/sons/subida.mp3 +0 -0
  3574. /package/{kits/papel-recortado/assets → materiais/papel-recortado}/sons/swoosh.mp3 +0 -0
  3575. /package/{kits/papel-recortado/assets → materiais/papel-recortado}/sons/tick.mp3 +0 -0
  3576. /package/{kits/papel-recortado/assets → materiais/papel-recortado}/sons/whoosh-entra.mp3 +0 -0
  3577. /package/{kits/papel-recortado/assets → materiais/papel-recortado}/sons/whoosh-sai.mp3 +0 -0
  3578. /package/{kits/papel-recortado/assets → materiais/papel-recortado}/trilha/trilha.mp3 +0 -0
  3579. /package/{kits/pixel/assets → materiais/pixel}/fontes/OFL-pressstart2p.txt +0 -0
  3580. /package/{kits/pixel/assets → materiais/pixel}/fontes/OFL-vt323.txt +0 -0
  3581. /package/{kits/pixel/assets → materiais/pixel}/fontes/pressstart2p.woff2 +0 -0
  3582. /package/{kits/pixel/assets → materiais/pixel}/fontes/vt323.woff2 +0 -0
  3583. /package/{kits/pixel/assets → materiais/pixel}/sons/assinatura.mp3 +0 -0
  3584. /package/{kits/pixel/assets → materiais/pixel}/sons/clique.mp3 +0 -0
  3585. /package/{kits/pixel/assets → materiais/pixel}/sons/impacto.mp3 +0 -0
  3586. /package/{kits/pixel/assets → materiais/pixel}/sons/pop-cartao.mp3 +0 -0
  3587. /package/{kits/pixel/assets → materiais/pixel}/sons/pop-palavra.mp3 +0 -0
  3588. /package/{kits/pixel/assets → materiais/pixel}/sons/subida.mp3 +0 -0
  3589. /package/{kits/pixel/assets → materiais/pixel}/sons/swoosh.mp3 +0 -0
  3590. /package/{kits/pixel/assets → materiais/pixel}/sons/tick.mp3 +0 -0
  3591. /package/{kits/pixel/assets → materiais/pixel}/sons/whoosh-entra.mp3 +0 -0
  3592. /package/{kits/pixel/assets → materiais/pixel}/sons/whoosh-sai.mp3 +0 -0
  3593. /package/{kits/pixel/assets → materiais/pixel}/trilha/trilha.mp3 +0 -0
  3594. /package/{kits/pontos-3d/elementos → materiais/pontos-3d/camera}/Camera.tsx +0 -0
  3595. /package/{kits/pontos-3d/assets → materiais/pontos-3d}/fontes/OFL-JetBrainsMono.txt +0 -0
  3596. /package/{kits/pontos-3d/assets → materiais/pontos-3d}/fontes/OFL-Sora.txt +0 -0
  3597. /package/{kits/pontos-3d/assets → materiais/pontos-3d}/fontes/jetbrains-latin.woff2 +0 -0
  3598. /package/{kits/pontos-3d/assets → materiais/pontos-3d}/fontes/sora-latin.woff2 +0 -0
  3599. /package/{kits/pontos-3d/assets → materiais/pontos-3d}/sons/assinatura.mp3 +0 -0
  3600. /package/{kits/pontos-3d/assets → materiais/pontos-3d}/sons/clique.mp3 +0 -0
  3601. /package/{kits/pontos-3d/assets → materiais/pontos-3d}/sons/impacto.mp3 +0 -0
  3602. /package/{kits/pontos-3d/assets → materiais/pontos-3d}/sons/pop.mp3 +0 -0
  3603. /package/{kits/pontos-3d/assets → materiais/pontos-3d}/sons/subida.mp3 +0 -0
  3604. /package/{kits/pontos-3d/assets → materiais/pontos-3d}/sons/tick.mp3 +0 -0
  3605. /package/{kits/pontos-3d/assets → materiais/pontos-3d}/sons/varre.mp3 +0 -0
  3606. /package/{kits/pontos-3d/assets → materiais/pontos-3d}/sons/whoosh.mp3 +0 -0
  3607. /package/{kits/pontos-3d/assets → materiais/pontos-3d}/trilha/tech-120bpm.mp3 +0 -0
  3608. /package/{kits/produto-3d/assets → materiais/produto-3d}/fontes/OFL-IBMPlexMono.txt +0 -0
  3609. /package/{kits/produto-3d/assets → materiais/produto-3d}/fontes/OFL-Syncopate.txt +0 -0
  3610. /package/{kits/produto-3d/assets → materiais/produto-3d}/fontes/plex-mono.woff2 +0 -0
  3611. /package/{kits/produto-3d/assets → materiais/produto-3d}/fontes/syncopate-latin.woff2 +0 -0
  3612. /package/{kits/produto-3d/elementos → materiais/produto-3d/lib}/modelos.ts +0 -0
  3613. /package/{kits/produto-3d/elementos → materiais/produto-3d/lib}/raymarch.ts +0 -0
  3614. /package/{kits/produto-3d/assets → materiais/produto-3d}/sons/assinatura.mp3 +0 -0
  3615. /package/{kits/produto-3d/assets → materiais/produto-3d}/sons/clique.mp3 +0 -0
  3616. /package/{kits/produto-3d/assets → materiais/produto-3d}/sons/impacto.mp3 +0 -0
  3617. /package/{kits/produto-3d/assets → materiais/produto-3d}/sons/pop-cartao.mp3 +0 -0
  3618. /package/{kits/produto-3d/assets → materiais/produto-3d}/sons/pop-palavra.mp3 +0 -0
  3619. /package/{kits/produto-3d/assets → materiais/produto-3d}/sons/subida.mp3 +0 -0
  3620. /package/{kits/produto-3d/assets → materiais/produto-3d}/sons/swoosh.mp3 +0 -0
  3621. /package/{kits/produto-3d/assets → materiais/produto-3d}/sons/whoosh-entra.mp3 +0 -0
  3622. /package/{kits/produto-3d/assets → materiais/produto-3d}/sons/whoosh-sai.mp3 +0 -0
  3623. /package/{kits/produto-3d/assets → materiais/produto-3d}/trilha/trilha.mp3 +0 -0
  3624. /package/{kits/quadro-giz/assets → materiais/quadro-giz}/fontes/OFL-patrick-hand.txt +0 -0
  3625. /package/{kits/quadro-giz/assets → materiais/quadro-giz}/fontes/OFL-schoolbell.txt +0 -0
  3626. /package/{kits/quadro-giz/assets → materiais/quadro-giz}/fontes/patrick-hand.woff2 +0 -0
  3627. /package/{kits/quadro-giz/assets → materiais/quadro-giz}/fontes/schoolbell.woff2 +0 -0
  3628. /package/{kits/quadro-giz/assets → materiais/quadro-giz}/sons/assinatura.mp3 +0 -0
  3629. /package/{kits/quadro-giz/assets → materiais/quadro-giz}/sons/clique.mp3 +0 -0
  3630. /package/{kits/quadro-giz/assets → materiais/quadro-giz}/sons/impacto.mp3 +0 -0
  3631. /package/{kits/quadro-giz/assets → materiais/quadro-giz}/sons/pop-cartao.mp3 +0 -0
  3632. /package/{kits/quadro-giz/assets → materiais/quadro-giz}/sons/pop-palavra.mp3 +0 -0
  3633. /package/{kits/quadro-giz/assets → materiais/quadro-giz}/sons/subida.mp3 +0 -0
  3634. /package/{kits/quadro-giz/assets → materiais/quadro-giz}/sons/swoosh.mp3 +0 -0
  3635. /package/{kits/quadro-giz/assets → materiais/quadro-giz}/sons/tick.mp3 +0 -0
  3636. /package/{kits/quadro-giz/assets → materiais/quadro-giz}/sons/whoosh-entra.mp3 +0 -0
  3637. /package/{kits/quadro-giz/assets → materiais/quadro-giz}/sons/whoosh-sai.mp3 +0 -0
  3638. /package/{kits/quadro-giz/assets → materiais/quadro-giz}/trilha/trilha.mp3 +0 -0
  3639. /package/{kits/rabisco/assets → materiais/rabisco}/fontes/OFL-caveat-700.txt +0 -0
  3640. /package/{kits/rabisco/assets → materiais/rabisco}/fontes/OFL-permanent-marker.txt +0 -0
  3641. /package/{kits/rabisco/assets → materiais/rabisco}/fontes/caveat-700.woff2 +0 -0
  3642. /package/{kits/rabisco/assets → materiais/rabisco}/fontes/permanent-marker.woff2 +0 -0
  3643. /package/{kits/rabisco/elementos → materiais/rabisco/formas}/Overlay.tsx +0 -0
  3644. /package/{kits/rabisco/assets → materiais/rabisco}/sons/assinatura.mp3 +0 -0
  3645. /package/{kits/rabisco/assets → materiais/rabisco}/sons/clique.mp3 +0 -0
  3646. /package/{kits/rabisco/assets → materiais/rabisco}/sons/impacto.mp3 +0 -0
  3647. /package/{kits/rabisco/assets → materiais/rabisco}/sons/pop-cartao.mp3 +0 -0
  3648. /package/{kits/rabisco/assets → materiais/rabisco}/sons/pop-palavra.mp3 +0 -0
  3649. /package/{kits/rabisco/assets → materiais/rabisco}/sons/subida.mp3 +0 -0
  3650. /package/{kits/rabisco/assets → materiais/rabisco}/sons/swoosh.mp3 +0 -0
  3651. /package/{kits/rabisco/assets → materiais/rabisco}/sons/tick.mp3 +0 -0
  3652. /package/{kits/rabisco/assets → materiais/rabisco}/sons/whoosh-entra.mp3 +0 -0
  3653. /package/{kits/rabisco/assets → materiais/rabisco}/sons/whoosh-sai.mp3 +0 -0
  3654. /package/{kits/rabisco/assets → materiais/rabisco}/trilha/trilha.mp3 +0 -0
  3655. /package/{kits/retro-70/elementos → materiais/retro-70/camera}/Camera.tsx +0 -0
  3656. /package/{kits/retro-70/assets → materiais/retro-70}/fontes/OFL-Fredoka.txt +0 -0
  3657. /package/{kits/retro-70/assets → materiais/retro-70}/fontes/OFL-Shrikhand.txt +0 -0
  3658. /package/{kits/retro-70/assets → materiais/retro-70}/fontes/fredoka.woff2 +0 -0
  3659. /package/{kits/retro-70/assets → materiais/retro-70}/fontes/shrikhand.woff2 +0 -0
  3660. /package/{kits/retro-70/assets → materiais/retro-70}/sons/assinatura.mp3 +0 -0
  3661. /package/{kits/retro-70/assets → materiais/retro-70}/sons/clique.mp3 +0 -0
  3662. /package/{kits/retro-70/assets → materiais/retro-70}/sons/impacto.mp3 +0 -0
  3663. /package/{kits/retro-70/assets → materiais/retro-70}/sons/pop-cartao.mp3 +0 -0
  3664. /package/{kits/retro-70/assets → materiais/retro-70}/sons/pop-palavra.mp3 +0 -0
  3665. /package/{kits/retro-70/assets → materiais/retro-70}/sons/subida.mp3 +0 -0
  3666. /package/{kits/retro-70/assets → materiais/retro-70}/sons/swoosh.mp3 +0 -0
  3667. /package/{kits/retro-70/assets → materiais/retro-70}/sons/whoosh-entra.mp3 +0 -0
  3668. /package/{kits/retro-70/assets → materiais/retro-70}/sons/whoosh-sai.mp3 +0 -0
  3669. /package/{kits/retro-70/assets → materiais/retro-70}/trilha/solar-104bpm.mp3 +0 -0
  3670. /package/{kits/revista/elementos → materiais/revista/camera}/Camera.tsx +0 -0
  3671. /package/{kits/revista/assets → materiais/revista}/fontes/OFL-CormorantGaramond.txt +0 -0
  3672. /package/{kits/revista/assets → materiais/revista}/fontes/OFL-Jost.txt +0 -0
  3673. /package/{kits/revista/assets → materiais/revista}/fontes/cormorant-italic.woff2 +0 -0
  3674. /package/{kits/revista/assets → materiais/revista}/fontes/cormorant.woff2 +0 -0
  3675. /package/{kits/revista/assets → materiais/revista}/fontes/jost.woff2 +0 -0
  3676. /package/{kits/revista/assets → materiais/revista}/sons/assinatura.mp3 +0 -0
  3677. /package/{kits/revista/assets → materiais/revista}/sons/clique.mp3 +0 -0
  3678. /package/{kits/revista/assets → materiais/revista}/sons/impacto.mp3 +0 -0
  3679. /package/{kits/revista/assets → materiais/revista}/sons/pop-cartao.mp3 +0 -0
  3680. /package/{kits/revista/assets → materiais/revista}/sons/pop-palavra.mp3 +0 -0
  3681. /package/{kits/revista/assets → materiais/revista}/sons/subida.mp3 +0 -0
  3682. /package/{kits/revista/assets → materiais/revista}/sons/swoosh.mp3 +0 -0
  3683. /package/{kits/revista/assets → materiais/revista}/sons/whoosh-entra.mp3 +0 -0
  3684. /package/{kits/revista/assets → materiais/revista}/sons/whoosh-sai.mp3 +0 -0
  3685. /package/{kits/revista/assets → materiais/revista}/trilha/editorial-100bpm.mp3 +0 -0
  3686. /package/{kits/risografia/assets → materiais/risografia}/fontes/OFL-bricolage-800.txt +0 -0
  3687. /package/{kits/risografia/assets → materiais/risografia}/fontes/OFL-space-mono-700.txt +0 -0
  3688. /package/{kits/risografia/assets → materiais/risografia}/fontes/bricolage-800.woff2 +0 -0
  3689. /package/{kits/risografia/assets → materiais/risografia}/fontes/space-mono-700.woff2 +0 -0
  3690. /package/{kits/risografia/assets → materiais/risografia}/sons/assinatura.mp3 +0 -0
  3691. /package/{kits/risografia/assets → materiais/risografia}/sons/clique.mp3 +0 -0
  3692. /package/{kits/risografia/assets → materiais/risografia}/sons/impacto.mp3 +0 -0
  3693. /package/{kits/risografia/assets → materiais/risografia}/sons/pop-cartao.mp3 +0 -0
  3694. /package/{kits/risografia/assets → materiais/risografia}/sons/pop-palavra.mp3 +0 -0
  3695. /package/{kits/risografia/assets → materiais/risografia}/sons/subida.mp3 +0 -0
  3696. /package/{kits/risografia/assets → materiais/risografia}/sons/swoosh.mp3 +0 -0
  3697. /package/{kits/risografia/assets → materiais/risografia}/sons/tick.mp3 +0 -0
  3698. /package/{kits/risografia/assets → materiais/risografia}/sons/whoosh-entra.mp3 +0 -0
  3699. /package/{kits/risografia/assets → materiais/risografia}/sons/whoosh-sai.mp3 +0 -0
  3700. /package/{kits/risografia/assets → materiais/risografia}/trilha/trilha.mp3 +0 -0
  3701. /package/materiais/saas-linear/{paleta.json → cores/paleta.json} +0 -0
  3702. /package/{kits/saas-linear/assets → materiais/saas-linear}/trilha/trilha.mp3 +0 -0
  3703. /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/fontes/OFL-DM-Mono.txt +0 -0
  3704. /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/fontes/OFL-Inter.txt +0 -0
  3705. /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/fontes/dm-mono.woff2 +0 -0
  3706. /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/fontes/inter.woff2 +0 -0
  3707. /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/sons/assinatura.mp3 +0 -0
  3708. /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/sons/clique.mp3 +0 -0
  3709. /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/sons/impacto.mp3 +0 -0
  3710. /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/sons/pop-cartao.mp3 +0 -0
  3711. /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/sons/pop-palavra.mp3 +0 -0
  3712. /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/sons/subida.mp3 +0 -0
  3713. /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/sons/swoosh.mp3 +0 -0
  3714. /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/sons/whoosh-entra.mp3 +0 -0
  3715. /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/sons/whoosh-sai.mp3 +0 -0
  3716. /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/trilha/trilha.mp3 +0 -0
  3717. /package/{kits/suica/elementos → materiais/suica/camera}/Camera.tsx +0 -0
  3718. /package/{kits/suica/assets → materiais/suica}/fontes/OFL-IBMPlexMono.txt +0 -0
  3719. /package/{kits/suica/assets → materiais/suica}/fontes/OFL-InterTight.txt +0 -0
  3720. /package/{kits/suica/assets → materiais/suica}/fontes/inter-tight.woff2 +0 -0
  3721. /package/{kits/suica/assets → materiais/suica}/fontes/plex-mono.woff2 +0 -0
  3722. /package/{kits/saas-linear/assets → materiais/suica}/sons/assinatura.mp3 +0 -0
  3723. /package/{kits/saas-linear/assets → materiais/suica}/sons/clique.mp3 +0 -0
  3724. /package/{kits/saas-linear/assets → materiais/suica}/sons/impacto.mp3 +0 -0
  3725. /package/{kits/saas-linear/assets → materiais/suica}/sons/pop-cartao.mp3 +0 -0
  3726. /package/{kits/saas-linear/assets → materiais/suica}/sons/pop-palavra.mp3 +0 -0
  3727. /package/{kits/saas-linear/assets → materiais/suica}/sons/subida.mp3 +0 -0
  3728. /package/{kits/saas-linear/assets → materiais/suica}/sons/swoosh.mp3 +0 -0
  3729. /package/{kits/saas-linear/assets → materiais/suica}/sons/whoosh-entra.mp3 +0 -0
  3730. /package/{kits/saas-linear/assets → materiais/suica}/sons/whoosh-sai.mp3 +0 -0
  3731. /package/{kits/suica/assets → materiais/suica}/trilha/frio-120bpm.mp3 +0 -0
  3732. /package/{kits/synthwave/elementos → materiais/synthwave/camera}/Camera.tsx +0 -0
  3733. /package/{kits/synthwave/assets → materiais/synthwave}/fontes/OFL-Orbitron.txt +0 -0
  3734. /package/{kits/synthwave/assets → materiais/synthwave}/fontes/OFL-Rajdhani.txt +0 -0
  3735. /package/{kits/synthwave/assets → materiais/synthwave}/fontes/orbitron.woff2 +0 -0
  3736. /package/{kits/synthwave/assets → materiais/synthwave}/fontes/rajdhani.woff2 +0 -0
  3737. /package/{kits/suica/assets → materiais/synthwave}/sons/assinatura.mp3 +0 -0
  3738. /package/{kits/suica/assets → materiais/synthwave}/sons/clique.mp3 +0 -0
  3739. /package/{kits/suica/assets → materiais/synthwave}/sons/impacto.mp3 +0 -0
  3740. /package/{kits/suica/assets → materiais/synthwave}/sons/pop-cartao.mp3 +0 -0
  3741. /package/{kits/suica/assets → materiais/synthwave}/sons/pop-palavra.mp3 +0 -0
  3742. /package/{kits/suica/assets → materiais/synthwave}/sons/subida.mp3 +0 -0
  3743. /package/{kits/suica/assets → materiais/synthwave}/sons/swoosh.mp3 +0 -0
  3744. /package/{kits/suica/assets → materiais/synthwave}/sons/whoosh-entra.mp3 +0 -0
  3745. /package/{kits/suica/assets → materiais/synthwave}/sons/whoosh-sai.mp3 +0 -0
  3746. /package/{kits/synthwave/assets → materiais/synthwave}/trilha/noite-110bpm.mp3 +0 -0
  3747. /package/{kits/terminal/assets → materiais/terminal}/fontes/OFL-jetbrains-mono-700.txt +0 -0
  3748. /package/{kits/terminal/assets → materiais/terminal}/fontes/OFL-vt323.txt +0 -0
  3749. /package/{kits/terminal/assets → materiais/terminal}/fontes/jetbrains-mono-700.woff2 +0 -0
  3750. /package/{kits/terminal/assets → materiais/terminal}/fontes/vt323.woff2 +0 -0
  3751. /package/{kits/terminal/assets → materiais/terminal}/sons/assinatura.mp3 +0 -0
  3752. /package/{kits/terminal/assets → materiais/terminal}/sons/clique.mp3 +0 -0
  3753. /package/{kits/terminal/assets → materiais/terminal}/sons/digitar.mp3 +0 -0
  3754. /package/{kits/terminal/assets → materiais/terminal}/sons/impacto.mp3 +0 -0
  3755. /package/{kits/terminal/assets → materiais/terminal}/sons/liga-crt.mp3 +0 -0
  3756. /package/{kits/terminal/assets → materiais/terminal}/sons/pop-cartao.mp3 +0 -0
  3757. /package/{kits/terminal/assets → materiais/terminal}/sons/pop-palavra.mp3 +0 -0
  3758. /package/{kits/terminal/assets → materiais/terminal}/sons/subida.mp3 +0 -0
  3759. /package/{kits/terminal/assets → materiais/terminal}/sons/swoosh.mp3 +0 -0
  3760. /package/{kits/terminal/assets → materiais/terminal}/sons/tick.mp3 +0 -0
  3761. /package/{kits/terminal/assets → materiais/terminal}/sons/whoosh-entra.mp3 +0 -0
  3762. /package/{kits/terminal/assets → materiais/terminal}/sons/whoosh-sai.mp3 +0 -0
  3763. /package/{kits/terminal/assets → materiais/terminal}/trilha/trilha.mp3 +0 -0
  3764. /package/{kits/tiktok-energia/elementos → materiais/tiktok-energia/camera}/Camera.tsx +0 -0
  3765. /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/fontes/OFL-Anton.txt +0 -0
  3766. /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/fontes/OFL-Rubik.txt +0 -0
  3767. /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/fontes/anton-latin.woff2 +0 -0
  3768. /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/fontes/rubik-latin.woff2 +0 -0
  3769. /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/sons/assinatura.mp3 +0 -0
  3770. /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/sons/corte.mp3 +0 -0
  3771. /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/sons/palavra.mp3 +0 -0
  3772. /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/sons/pop.mp3 +0 -0
  3773. /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/sons/soco.mp3 +0 -0
  3774. /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/sons/subida.mp3 +0 -0
  3775. /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/sons/whoosh.mp3 +0 -0
  3776. /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/sons/zap.mp3 +0 -0
  3777. /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/trilha/tech-128bpm.mp3 +0 -0
  3778. /package/{kits/tunel/elementos → materiais/tunel/camera}/Camera.tsx +0 -0
  3779. /package/{kits/tunel/assets → materiais/tunel}/fontes/OFL-ChakraPetch.txt +0 -0
  3780. /package/{kits/tunel/assets → materiais/tunel}/fontes/OFL-Syncopate.txt +0 -0
  3781. /package/{kits/tunel/assets → materiais/tunel}/fontes/chakra-latin.woff2 +0 -0
  3782. /package/{kits/tunel/assets → materiais/tunel}/fontes/syncopate-latin.woff2 +0 -0
  3783. /package/{kits/tunel/assets → materiais/tunel}/sons/assinatura.mp3 +0 -0
  3784. /package/{kits/tunel/assets → materiais/tunel}/sons/clique.mp3 +0 -0
  3785. /package/{kits/tunel/assets → materiais/tunel}/sons/impacto.mp3 +0 -0
  3786. /package/{kits/tunel/assets → materiais/tunel}/sons/passa.mp3 +0 -0
  3787. /package/{kits/tunel/assets → materiais/tunel}/sons/subida.mp3 +0 -0
  3788. /package/{kits/tunel/assets → materiais/tunel}/sons/tick.mp3 +0 -0
  3789. /package/{kits/tunel/assets → materiais/tunel}/sons/varre.mp3 +0 -0
  3790. /package/{kits/tunel/assets → materiais/tunel}/sons/whoosh.mp3 +0 -0
  3791. /package/{kits/tunel/assets → materiais/tunel}/trilha/tech-128bpm.mp3 +0 -0
  3792. /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/fontes/OFL-JetBrainsMono.txt +0 -0
  3793. /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/fontes/OFL-PlusJakartaSans.txt +0 -0
  3794. /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/fontes/jakarta.woff2 +0 -0
  3795. /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/fontes/jbmono.woff2 +0 -0
  3796. /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/sons/assinatura.mp3 +0 -0
  3797. /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/sons/clique.mp3 +0 -0
  3798. /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/sons/digitar.mp3 +0 -0
  3799. /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/sons/impacto.mp3 +0 -0
  3800. /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/sons/pop-cartao.mp3 +0 -0
  3801. /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/sons/pop-palavra.mp3 +0 -0
  3802. /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/sons/subida.mp3 +0 -0
  3803. /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/sons/sucesso.mp3 +0 -0
  3804. /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/sons/swoosh.mp3 +0 -0
  3805. /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/sons/whoosh-entra.mp3 +0 -0
  3806. /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/sons/whoosh-sai.mp3 +0 -0
  3807. /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/trilha/passo-108bpm.mp3 +0 -0
  3808. /package/{kits/ugc-reels/elementos → materiais/ugc-reels/camera}/Camera.tsx +0 -0
  3809. /package/{kits/ugc-reels/assets → materiais/ugc-reels}/fontes/OFL-Caveat.txt +0 -0
  3810. /package/{kits/ugc-reels/assets → materiais/ugc-reels}/fontes/OFL-Montserrat.txt +0 -0
  3811. /package/{kits/ugc-reels/assets → materiais/ugc-reels}/fontes/caveat-latin.woff2 +0 -0
  3812. /package/{kits/ugc-reels/assets → materiais/ugc-reels}/fontes/montserrat-latin.woff2 +0 -0
  3813. /package/{kits/ugc-reels/assets → materiais/ugc-reels}/sons/assinatura.mp3 +0 -0
  3814. /package/{kits/ugc-reels/assets → materiais/ugc-reels}/sons/corte.mp3 +0 -0
  3815. /package/{kits/ugc-reels/assets → materiais/ugc-reels}/sons/impacto.mp3 +0 -0
  3816. /package/{kits/ugc-reels/assets → materiais/ugc-reels}/sons/notificacao.mp3 +0 -0
  3817. /package/{kits/ugc-reels/assets → materiais/ugc-reels}/sons/palavra.mp3 +0 -0
  3818. /package/{kits/ugc-reels/assets → materiais/ugc-reels}/sons/pop.mp3 +0 -0
  3819. /package/{kits/ugc-reels/assets → materiais/ugc-reels}/sons/toque.mp3 +0 -0
  3820. /package/{kits/ugc-reels/assets → materiais/ugc-reels}/sons/whoosh.mp3 +0 -0
  3821. /package/{kits/ugc-reels/assets → materiais/ugc-reels}/trilha/pop-120bpm.mp3 +0 -0
  3822. /package/{kits/vercel-mono/assets → materiais/vercel-mono}/fontes/OFL-Inter.txt +0 -0
  3823. /package/{kits/vercel-mono/assets → materiais/vercel-mono}/fontes/OFL-JetBrains-Mono.txt +0 -0
  3824. /package/{kits/vercel-mono/assets → materiais/vercel-mono}/fontes/inter.woff2 +0 -0
  3825. /package/{kits/vercel-mono/assets → materiais/vercel-mono}/fontes/jetbrains-mono.woff2 +0 -0
  3826. /package/{kits/synthwave/assets → materiais/vercel-mono}/sons/assinatura.mp3 +0 -0
  3827. /package/{kits/synthwave/assets → materiais/vercel-mono}/sons/clique.mp3 +0 -0
  3828. /package/{kits/synthwave/assets → materiais/vercel-mono}/sons/impacto.mp3 +0 -0
  3829. /package/{kits/synthwave/assets → materiais/vercel-mono}/sons/pop-cartao.mp3 +0 -0
  3830. /package/{kits/synthwave/assets → materiais/vercel-mono}/sons/pop-palavra.mp3 +0 -0
  3831. /package/{kits/synthwave/assets → materiais/vercel-mono}/sons/subida.mp3 +0 -0
  3832. /package/{kits/synthwave/assets → materiais/vercel-mono}/sons/swoosh.mp3 +0 -0
  3833. /package/{kits/synthwave/assets → materiais/vercel-mono}/sons/whoosh-entra.mp3 +0 -0
  3834. /package/{kits/synthwave/assets → materiais/vercel-mono}/sons/whoosh-sai.mp3 +0 -0
  3835. /package/{kits/vercel-mono/assets → materiais/vercel-mono}/trilha/trilha.mp3 +0 -0
  3836. /package/{kits/vhs-90/elementos → materiais/vhs-90/camera}/Camera.tsx +0 -0
  3837. /package/{kits/vhs-90/assets → materiais/vhs-90}/fontes/OFL-BebasNeue.txt +0 -0
  3838. /package/{kits/vhs-90/assets → materiais/vhs-90}/fontes/OFL-VT323.txt +0 -0
  3839. /package/{kits/vhs-90/assets → materiais/vhs-90}/fontes/bebas.woff2 +0 -0
  3840. /package/{kits/vhs-90/assets → materiais/vhs-90}/fontes/vt323.woff2 +0 -0
  3841. /package/{kits/vhs-90/assets → materiais/vhs-90}/sons/assinatura.mp3 +0 -0
  3842. /package/{kits/vhs-90/assets → materiais/vhs-90}/sons/clique.mp3 +0 -0
  3843. /package/{kits/vhs-90/assets → materiais/vhs-90}/sons/impacto.mp3 +0 -0
  3844. /package/{kits/vhs-90/assets → materiais/vhs-90}/sons/pop-cartao.mp3 +0 -0
  3845. /package/{kits/vhs-90/assets → materiais/vhs-90}/sons/pop-palavra.mp3 +0 -0
  3846. /package/{kits/vhs-90/assets → materiais/vhs-90}/sons/subida.mp3 +0 -0
  3847. /package/{kits/vhs-90/assets → materiais/vhs-90}/sons/swoosh.mp3 +0 -0
  3848. /package/{kits/vhs-90/assets → materiais/vhs-90}/sons/whoosh-entra.mp3 +0 -0
  3849. /package/{kits/vhs-90/assets → materiais/vhs-90}/sons/whoosh-sai.mp3 +0 -0
  3850. /package/{kits/vhs-90/assets → materiais/vhs-90}/trilha/fita-88bpm.mp3 +0 -0
  3851. /package/{kits/vidro-ios/assets → materiais/vidro-ios}/fontes/OFL-DM-Mono.txt +0 -0
  3852. /package/{kits/vidro-ios/assets → materiais/vidro-ios}/fontes/OFL-Inter.txt +0 -0
  3853. /package/{kits/vidro-ios/assets → materiais/vidro-ios}/fontes/dm-mono.woff2 +0 -0
  3854. /package/{kits/vidro-ios/assets → materiais/vidro-ios}/fontes/inter.woff2 +0 -0
  3855. /package/{kits/vidro-ios/assets → materiais/vidro-ios}/sons/assinatura.mp3 +0 -0
  3856. /package/{kits/vidro-ios/assets → materiais/vidro-ios}/sons/clique.mp3 +0 -0
  3857. /package/{kits/vidro-ios/assets → materiais/vidro-ios}/sons/impacto.mp3 +0 -0
  3858. /package/{kits/vidro-ios/assets → materiais/vidro-ios}/sons/pop-cartao.mp3 +0 -0
  3859. /package/{kits/vidro-ios/assets → materiais/vidro-ios}/sons/pop-palavra.mp3 +0 -0
  3860. /package/{kits/vidro-ios/assets → materiais/vidro-ios}/sons/subida.mp3 +0 -0
  3861. /package/{kits/vidro-ios/assets → materiais/vidro-ios}/sons/swoosh.mp3 +0 -0
  3862. /package/{kits/vidro-ios/assets → materiais/vidro-ios}/sons/whoosh-entra.mp3 +0 -0
  3863. /package/{kits/vidro-ios/assets → materiais/vidro-ios}/sons/whoosh-sai.mp3 +0 -0
  3864. /package/{kits/vidro-ios/assets → materiais/vidro-ios}/trilha/trilha.mp3 +0 -0
  3865. /package/{kits/y2k-cromado/elementos → materiais/y2k-cromado/camera}/Camera.tsx +0 -0
  3866. /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/fontes/OFL-DMMono.txt +0 -0
  3867. /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/fontes/OFL-Unbounded.txt +0 -0
  3868. /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/fontes/dm-mono.woff2 +0 -0
  3869. /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/fontes/unbounded.woff2 +0 -0
  3870. /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/sons/assinatura.mp3 +0 -0
  3871. /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/sons/clique.mp3 +0 -0
  3872. /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/sons/impacto.mp3 +0 -0
  3873. /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/sons/pop-cartao.mp3 +0 -0
  3874. /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/sons/pop-palavra.mp3 +0 -0
  3875. /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/sons/subida.mp3 +0 -0
  3876. /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/sons/swoosh.mp3 +0 -0
  3877. /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/sons/whoosh-entra.mp3 +0 -0
  3878. /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/sons/whoosh-sai.mp3 +0 -0
  3879. /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/trilha/y2k-128bpm.mp3 +0 -0
@@ -0,0 +1,2725 @@
1
+ /**
2
+ * estudio/index.js — as ferramentas do Studio, do jeito que o agente as vê.
3
+ *
4
+ * ── O QUE ESTE ARQUIVO SUBSTITUI ─────────────────────────────────────────
5
+ * `lib/studio.js`, 887 linhas cuja maior parte era ligar, manter de pé e
6
+ * conversar por HTTP com um servidor Python que desenhava páginas — e mais o
7
+ * cuidado de abrir uma aba no navegador da pessoa no momento certo, e de não
8
+ * abrir três.
9
+ *
10
+ * Nada disso existe mais. Cada peça é uma PASTA, cada render é o Remotion, e
11
+ * a única coisa que abre no fim é o vídeo pronto.
12
+ *
13
+ * ── AS SETE FERRAMENTAS, E POR QUE SÃO SETE ──────────────────────────────
14
+ * estudio_projeto abrir, achar, listar, lembrar
15
+ * estudio_plano escrever ou ajustar o que o vídeo é
16
+ * estudio_midia procurar e baixar imagem, som, ícone, fonte
17
+ * estudio_narrar a voz, com os tempos medidos
18
+ * estudio_video o que se faz com a gravação: medir, cortar, legendar
19
+ * estudio_render virar arquivo
20
+ * estudio_site ler a identidade de uma marca a partir do link
21
+ *
22
+ * A tentação era uma ferramenta por verbo (criar cena, mover elemento, trocar
23
+ * cor). Isso multiplicaria o catálogo por dez e, pior, faria o modelo montar
24
+ * o vídeo por ajustes — que é exatamente como se produz vídeo genérico. O
25
+ * plano inteiro de uma vez obriga a decidir o vídeo inteiro de uma vez.
26
+ */
27
+
28
+ 'use strict';
29
+
30
+ const fs = require('fs');
31
+ const os = require('os');
32
+ const path = require('path');
33
+ const { spawn } = require('child_process');
34
+
35
+ const projeto = require('./projeto.js');
36
+ const acervo = require('./acervo.js');
37
+ const hibrido = require('./hibrido.js');
38
+ const biblioteca = require('./biblioteca.js');
39
+ const referencias = require('./referencias.js');
40
+ const variedade = require('./variedade.js');
41
+ const diretor = require('./diretor.js');
42
+ const falantes = require('./falantes.js');
43
+ const variacao3d = require('./variacao3d.js');
44
+ const plano = require('./plano.js');
45
+ const remotion = require('./remotion.js');
46
+ const assets = require('./assets.js');
47
+ const video = require('./video.js');
48
+ const batida = require('./batida.js');
49
+ const revisor = require('./revisor.js');
50
+ const marcaLib = require('./marca.js');
51
+ const marcaKit = require('../marca-kit.js');
52
+ const conferencia = require('./conferencia.js');
53
+ const margem = require('./margem.js');
54
+ const assinatura = require('./assinatura.js');
55
+ const identidade = require('./identidade.js');
56
+ const slides = require('./slides.js');
57
+ const edicao = require('./edicao.js');
58
+ const composicao = require('./composicao.js');
59
+ const acervoSite = require('./acervo-site.js');
60
+ const printSite = require('./print-site.js');
61
+ const efeitos = require('./efeitos.js');
62
+ const impacto = require('./impacto.js');
63
+ const cinema = require('./cinema.js');
64
+ const motion = require('./motion.js');
65
+ const gerativo = require('./gerativo.js');
66
+ const fluido = require('./fluido.js');
67
+ const vox = require('./vox.js');
68
+ const kokoro = require('./kokoro.js');
69
+ const voicestudio = require('./voicestudio.js');
70
+ const lancamento = require('./lancamento.js');
71
+ const glifos = require('./glifos.js');
72
+ const personagem = require('./personagem.js');
73
+ const mundo = require('./mundo.js');
74
+ const cenarios = require('./cenarios.js');
75
+ const estilos = require('./estilos.js');
76
+ const { conferirCena } = require('./cena.js');
77
+ const movimentos = require('./movimentos.js');
78
+ const colecao = require('./colecao.js');
79
+ const { escolherEstilo, LEVES } = require('./estilo.js');
80
+ const sonsLeves = require('./sons-leves.js');
81
+ const semNarracao = require('./sem-narracao.js');
82
+ const camadas = require('./camadas.js');
83
+ const ende = require('./ende.js');
84
+ const producao = require('./producao.js');
85
+
86
+ const PY = path.join(__dirname, '..', '..', '..', 'studio');
87
+
88
+ /** Qual python desta máquina. O mesmo problema do Studio antigo, mesma cura. */
89
+ function python() {
90
+ const { execSync } = require('child_process');
91
+ const nomes = process.platform === 'win32'
92
+ ? ['python', 'py', 'python3']
93
+ : ['python3', 'python', '/opt/homebrew/bin/python3', '/usr/local/bin/python3', '/usr/bin/python3'];
94
+ for (const n of nomes) {
95
+ try {
96
+ const v = execSync(`${n} --version`, { stdio: ['ignore', 'pipe', 'pipe'], timeout: 5000 }).toString();
97
+ if (/Python 3/.test(v)) return n;
98
+ } catch { /* próximo */ }
99
+ }
100
+ return null;
101
+ }
102
+
103
+ function rodarPython(script, args, { timeout = 20 * 60000 } = {}) {
104
+ return new Promise((resolve) => {
105
+ const py = python();
106
+ if (!py) {
107
+ return resolve({ ok: false, error: 'não achei o Python 3 nesta máquina.',
108
+ comoResolver: 'instale o Python 3 (python.org) e tente de novo' });
109
+ }
110
+ const p = spawn(py, [path.join(PY, script), ...args]);
111
+ let saida = '', erro = '';
112
+ p.stdout.on('data', (d) => { saida += d.toString(); });
113
+ p.stderr.on('data', (d) => { erro += d.toString(); });
114
+ const relogio = setTimeout(() => { try { p.kill(); } catch {} }, timeout);
115
+ p.on('close', () => {
116
+ clearTimeout(relogio);
117
+ try { resolve(JSON.parse(saida.trim().split('\n').pop())); }
118
+ catch { resolve({ ok: false, error: (erro || saida).slice(-400).trim() || 'o script não respondeu' }); }
119
+ });
120
+ p.on('error', (e) => { clearTimeout(relogio); resolve({ ok: false, error: e.message }); });
121
+ });
122
+ }
123
+
124
+ /* O RECORTE DA PESSOA precisa do MediaPipe, e o MediaPipe só existe até o
125
+ Python 3.12 — no Python 3.14 do Homebrew ele nem instala (medido em
126
+ 25/09: o recorte nunca tinha rodado nesta máquina). Com o `uv`, o script
127
+ roda num Python 3.12 isolado, baixado uma vez; sem ele, tenta o Python da
128
+ máquina, como antes. */
129
+ function acharUv() {
130
+ const { execFileSync } = require('child_process');
131
+ for (const c of ['uv', path.join(os.homedir(), '.local', 'bin', 'uv'), '/opt/homebrew/bin/uv', '/usr/local/bin/uv']) {
132
+ try { execFileSync(c, ['--version'], { stdio: 'ignore', timeout: 5000 }); return c; } catch { /* próximo */ }
133
+ }
134
+ return null;
135
+ }
136
+ function rodarPessoa(args, { timeout = 40 * 60000 } = {}) {
137
+ const uv = acharUv();
138
+ if (!uv) return rodarPython('pessoa.py', args, { timeout });
139
+ return new Promise((resolve) => {
140
+ const p = spawn(uv, ['run', '--quiet', '--python', '3.12', '--with', 'mediapipe<0.10.22',
141
+ '--with', 'opencv-python', '--with', 'numpy', 'python', path.join(PY, 'pessoa.py'), ...args]);
142
+ let saida = '', erro = '';
143
+ p.stdout.on('data', (d) => { saida += d.toString(); });
144
+ p.stderr.on('data', (d) => { erro += d.toString(); });
145
+ const relogio = setTimeout(() => { try { p.kill(); } catch {} }, timeout);
146
+ p.on('close', () => {
147
+ clearTimeout(relogio);
148
+ try { resolve(JSON.parse(saida.trim().split('\n').pop())); }
149
+ catch { resolve({ ok: false, error: (erro || saida).slice(-400).trim() || 'o recorte não respondeu' }); }
150
+ });
151
+ p.on('error', (e) => { clearTimeout(relogio); resolve({ ok: false, error: e.message }); });
152
+ });
153
+ }
154
+
155
+ // ── estudio_projeto ──────────────────────────────────────────────────────
156
+
157
+ /**
158
+ * A queixa quando o projeto não aparece — e ela muda conforme o motivo.
159
+ *
160
+ * "não achei o projeto 'undefined'" é o que o agente recebia ao chamar a
161
+ * ferramenta SEM id, e não ensina nada: ele não sabe se inventou o id, se o
162
+ * projeto sumiu, ou se esqueceu o argumento. Visto em produção — o modelo
163
+ * chamou `estudio_plano` sem id e ficou repetindo a chamada.
164
+ */
165
+ function semProjeto(id) {
166
+ if (id == null || String(id).trim() === '') {
167
+ return {
168
+ ok: false,
169
+ error: 'faltou dizer em qual projeto (id).',
170
+ comoResolver: 'crie um com estudio_projeto acao:"criar" e use o id que ele devolve, '
171
+ + 'ou ache o existente com acao:"listar" / acao:"procurar".',
172
+ };
173
+ }
174
+ return {
175
+ ok: false,
176
+ error: `não achei o projeto "${id}".`,
177
+ comoResolver: 'liste com estudio_projeto acao:"listar" e use um id de lá — '
178
+ + 'o id é o nome da pasta (ex: "anuncio-picpay"), não o título.',
179
+ };
180
+ }
181
+
182
+ async function ferramentaProjeto(args, ctx = {}) {
183
+ const acao = String(args.acao || 'listar').toLowerCase();
184
+
185
+ if (acao === 'editar' || acao === 'editor' || acao === 'studio') return editarNoStudio(args, ctx);
186
+
187
+ if (acao === 'criar' || acao === 'novo') {
188
+ const r = projeto.criar({
189
+ titulo: args.titulo, pedido: args.pedido || args.titulo, formato: args.formato || 'video',
190
+ });
191
+ return { ...r, comoUsar: 'agora escreva o plano com estudio_plano, usando este id.' };
192
+ }
193
+
194
+ if (acao === 'abrir' || acao === 'ler') {
195
+ const p = projeto.ler(args.id);
196
+ if (!p) return semProjeto(args.id);
197
+ const pl = projeto.lerPlano(args.id);
198
+ return {
199
+ ok: true, projeto: p,
200
+ // O caderno é o que faz "mexe naquela parte" funcionar semanas
201
+ // depois: sem ele, reabrir diz o que existe e nunca por quê.
202
+ caderno: projeto.caderno(args.id, { ultimas: 25 }),
203
+ // A conversa das sessões em que se mexeu neste projeto (AGENTS.md
204
+ // da pasta dele, lib/agents-md.js): o que foi pedido e decidido.
205
+ memoria: require('../../agents-md.js').ler(p.pasta) || undefined,
206
+ plano: pl ? plano.resumo(pl) : 'ainda não há plano',
207
+ versoes: projeto.versoes(args.id),
208
+ arquivos: listarArquivos(p.pasta),
209
+ };
210
+ }
211
+
212
+ if (acao === 'procurar' || acao === 'achar') {
213
+ const achados = projeto.procurar(args.texto || args.titulo || '');
214
+ if (!achados.length) return { ok: true, achados: [], aviso: 'nenhum projeto parecido.' };
215
+ return {
216
+ ok: true,
217
+ achados: achados.map((p) => ({ id: p.id, titulo: p.titulo, criado: p.criado.slice(0, 10), pedido: p.pedido.slice(0, 120) })),
218
+ };
219
+ }
220
+
221
+ if (acao === 'anotar') {
222
+ projeto.anotar(args.id, args.tipo || 'nota', args.texto || '');
223
+ return { ok: true };
224
+ }
225
+
226
+ /* O FEEDBACK que vira estilo: "adorei a virada", "texto demais" fica na
227
+ assinatura da pessoa (assinatura.js), e o próximo vídeo já parte dele.
228
+ Sem texto, devolve a assinatura (as faixas e as notas). */
229
+ if (acao === 'assinatura' || acao === 'feedback' || acao === 'gostei') {
230
+ const nome = args.nome || args.assinatura || 'fluido';
231
+ if (!args.texto) { const a = assinatura.ler(nome); return a ? { ok: true, assinatura: a } : { ok: false, error: `a assinatura "${nome}" não existe.` }; }
232
+ const r = assinatura.anotar(nome, args.texto);
233
+ if (r.ok && args.id) projeto.anotar(args.id, 'assinatura', `feedback gravado na assinatura ${nome}: ${args.texto}`);
234
+ return r;
235
+ }
236
+
237
+ const todos = projeto.listar({ limite: Number(args.limite) || 20 });
238
+ return {
239
+ ok: true,
240
+ projetos: todos.map((p) => ({ id: p.id, titulo: p.titulo, criado: p.criado.slice(0, 10), renders: (p.renders || []).length })),
241
+ };
242
+ }
243
+
244
+ /* EDITAR um vídeo que o Estúdio fez: abre o projeto Remotion dele no
245
+ Remotion Studio. Sem id, é o projeto mais novo. */
246
+ async function editarNoStudio(args, ctx = {}) {
247
+ const p = args.id ? projeto.ler(args.id) : projeto.listar({ limite: 1 })[0];
248
+ if (!p) return semProjeto(args.id);
249
+ const raiz = path.join(p.pasta, 'remotion');
250
+ if (!fs.existsSync(path.join(raiz, 'package.json'))) {
251
+ // Projeto que ainda não virou Remotion: escreve agora, sem renderizar.
252
+ const m = await ferramentaRender({ id: p.id, somenteProjeto: true }, ctx);
253
+ if (!m.ok) return m;
254
+ }
255
+ const r = remotion.abrirStudio({ raiz, spawnar: ctx.spawnar });
256
+ if (!r.ok) return { ...r, pasta: raiz };
257
+ projeto.anotar(p.id, 'editor', 'abriu no Remotion Studio');
258
+ return {
259
+ ok: true, id: p.id, pasta: raiz, comando: r.comando,
260
+ aviso: 'O Remotion Studio está ABRINDO no navegador (geralmente http://localhost:3000). '
261
+ + `Diga ao usuário onde está o projeto: ${raiz}. Lá ele mexe e renderiza pelo botão Render do Studio. `
262
+ + 'Cuidado: estudio_render reescreve a pasta src/ a partir do plano e apaga o que ele mudou à mão.',
263
+ };
264
+ }
265
+
266
+ function listarArquivos(pasta) {
267
+ const saida = {};
268
+ for (const sub of ['entrada', 'midia', 'saida']) {
269
+ try {
270
+ saida[sub] = fs.readdirSync(path.join(pasta, sub))
271
+ .filter((f) => !f.endsWith('.licenca.json')).slice(0, 40);
272
+ } catch { saida[sub] = []; }
273
+ }
274
+ return saida;
275
+ }
276
+
277
+ // ── estudio_plano ────────────────────────────────────────────────────────
278
+
279
+ /* O projeto de AGORA, quando o modelo esquece o id: o criado há menos de
280
+ 30 minutos. Medido com o modelo grátis em 25/09: ele chamou estudio_plano
281
+ sem id logo depois de criar o projeto, e a tarefa morreu ali. */
282
+ function projetoRecente() {
283
+ const agora = Date.now();
284
+ const lista = projeto.listar({ limite: 8 })
285
+ .filter((x) => x.criado && agora - new Date(x.criado).getTime() < 30 * 60000)
286
+ .sort((a, b) => new Date(b.criado) - new Date(a.criado));
287
+ return lista[0] || null;
288
+ }
289
+
290
+ /* Sem id, o projeto é o que acabou de ser criado. Visto em 12/10: o agente
291
+ criou o projeto, chamou estudio_narrar sem id e o vídeo morreu ali. Só vale
292
+ para chamada SEM id (id errado continua sendo erro) e para projeto de até
293
+ 30 minutos, como no estudio_plano. */
294
+ function projetoOuRecente(id) {
295
+ if (id != null && String(id).trim() !== '') return projeto.ler(id);
296
+ return projetoRecente();
297
+ }
298
+
299
+ /* roteiro.objetos: [{nome, src}] com o PNG DENTRO da pasta do projeto (o que
300
+ o estudio_midia baixou ou recortou). Caminho de fora some: o render só
301
+ enxerga a pasta do projeto, e a IA não escolhe arquivo da máquina. */
302
+ function objetosDoRoteiro(objetos, pasta) {
303
+ const raiz = path.resolve(pasta);
304
+ return (Array.isArray(objetos) ? objetos : []).map((o) => {
305
+ if (!o || typeof o.src !== 'string') return null;
306
+ const abs = path.resolve(raiz, o.src);
307
+ if (!abs.startsWith(raiz + path.sep) || !/\.png$/i.test(abs) || !fs.existsSync(abs)) return null;
308
+ return { nome: o.nome, src: path.relative(raiz, abs).replace(/\\/g, '/') };
309
+ }).filter(Boolean);
310
+ }
311
+
312
+ /** O roteiro é utilizável como veio? (objeto ou JSON, com partes de tipo conhecido) */
313
+ function roteiroValido(r) {
314
+ let x = r;
315
+ if (typeof x === 'string') { try { x = JSON.parse(x); } catch { return null; } }
316
+ const partes = Array.isArray(x) ? x : x && x.partes;
317
+ if (!Array.isArray(partes) || partes.length < 2) return null;
318
+ const CINEMA = ['frase', 'montagem', 'numeros', 'escada', 'dia', 'depoimento', 'climax', 'final'];
319
+ const NOVOS = ['logo', 'cores', 'produto']; // vox.js e lancamento.js
320
+ /* A FALA do personagem (personagem.js) não tem tipo: é {falante, texto}. Sem
321
+ isto, o roteiro de diálogo caía no roteirista do servidor, que reescrevia
322
+ tudo com um apresentador só — e as duas vozes sumiam (10/10). */
323
+ const conversa = (x && !Array.isArray(x) && String(x.estilo || '').toLowerCase() === 'personagem') || partes.some((pt) => pt && typeof pt.falante === 'string' && pt.falante.trim());
324
+ const fala = (pt) => conversa && !pt.tipo && typeof (pt.texto || pt.fala) === 'string' && String(pt.texto || pt.fala).trim();
325
+ if (!partes.every((pt) => pt && (composicao.TIPOS.includes(pt.tipo) || CINEMA.includes(pt.tipo) || NOVOS.includes(pt.tipo) || fala(pt)))) return null;
326
+ // Duas vozes: roteiro.vozes e parte.falante, limpos (falantes.js). Sem eles, nada muda.
327
+ const obj = falantes.normalizar(Array.isArray(x) ? { partes } : x);
328
+ return partes.some((pt) => CINEMA.includes(pt.tipo)) && !obj.estilo ? { ...obj, estilo: 'cinema' } : obj;
329
+ }
330
+
331
+ // O último site lido, para o projeto que nasceu DEPOIS da leitura.
332
+ let ultimoSite = null;
333
+
334
+ async function garantirAcervo(p) {
335
+ if (p.acervo && (p.acervo.fotos || []).length) return p;
336
+ if (!ultimoSite || Date.now() - ultimoSite.quando > 60 * 60000) return p;
337
+ try {
338
+ const a = await acervoSite.colher({ url: ultimoSite.url, pedido: p.pedido || '', pasta: p.pasta, htmlInicial: ultimoSite.html,
339
+ buscar: identidade.buscar, baixar: assets.baixar });
340
+ projeto.salvar(p.id, { acervo: { fotos: a.fotos, videos: a.videos, fatos: a.fatos, site: ultimoSite.url }, ...(p.marca ? {} : { marca: ultimoSite.marca }) });
341
+ projeto.anotar(p.id, 'midia', `acervo do site: ${a.fotos.length} fotos, ${a.videos.length} vídeos`);
342
+ } catch { /* segue sem acervo */ }
343
+ return projeto.ler(p.id);
344
+ }
345
+
346
+ /* O ROTEIRISTA do servidor: quando o modelo não manda um roteiro que preste
347
+ (nenhum, ou texto corrido), o pedido e os fatos da marca viram o roteiro
348
+ numa chamada só, com uma tarefa só. */
349
+
350
+ async function roteiroDoServidor(p, args) {
351
+ const cfg = require('../../config/config').loadConfig();
352
+ const api = require('../../provider/api');
353
+ const pedido = [p.pedido, args.pedido].filter(Boolean).join(' — ');
354
+ const seg = Number(args.segundos) || Number((pedido.match(/(\d{2,3})\s*(s\b|seg)/i) || [])[1]) || 30;
355
+ const acervo = p.acervo || {};
356
+ const r = await api.request(cfg.server, '/api/roteiro', {
357
+ pedido, segundos: seg,
358
+ fatos: (acervo.fatos || []).map((f) => f.texto).join('\n\n').slice(0, 5000),
359
+ fotos: (acervo.fotos || []).length ? `${acervo.fotos.length} fotos reais` : '',
360
+ site: acervo.site ? new URL(acervo.site).hostname.replace(/^www\./, '') : '',
361
+ rascunho: typeof args.roteiro === 'string' ? args.roteiro : '',
362
+ // Pedido de motion nunca vira impacto, nem sendo anúncio.
363
+ estilo: args.estilo || (escolherEstilo({ pedido }) === 'impacto' ? 'impacto' : undefined),
364
+ }, cfg.token);
365
+ if (!r || !r.ok) return { ok: false, error: (r && r.erro) || 'o roteirista não respondeu.' };
366
+ return { ok: true, roteiro: { ...r.roteiro, marca: marcaKit.preencher((args.roteiro && args.roteiro.marca) || p.marca || undefined, { pastas: [p.pasta, process.cwd()] }) } };
367
+ }
368
+
369
+ async function ferramentaPlano(args) {
370
+ let p = projeto.ler(args.id);
371
+ // Só quando o id FALTOU: id errado continua sendo erro, para não escrever no projeto errado.
372
+ if (!p && (args.id == null || String(args.id).trim() === '') && (args.roteiro || args.plano || args.cenas)) {
373
+ const recente = projetoRecente();
374
+ if (recente) { args = { ...args, id: recente.id }; p = recente; }
375
+ }
376
+ if (!p) return semProjeto(args.id);
377
+
378
+ /* Roteiro que não serve (texto corrido, JSON quebrado, tipo inventado) ou
379
+ nenhum, num projeto ainda sem plano: o roteirista escreve. */
380
+ const valido = args.roteiro ? roteiroValido(args.roteiro) : null;
381
+ if (!args.plano && !args.cenas && !args.voltarPara && !valido && (args.roteiro || !projeto.lerPlano(args.id))) {
382
+ p = await garantirAcervo(p);
383
+ const escrito = await roteiroDoServidor(p, args);
384
+ if (!escrito.ok) return escrito;
385
+ args = { ...args, roteiro: escrito.roteiro };
386
+ projeto.anotar(p.id, 'plano', `roteiro escrito pelo roteirista: ${escrito.roteiro.partes.length} partes`);
387
+ } else if (valido) {
388
+ args = { ...args, roteiro: valido };
389
+ p = await garantirAcervo(p);
390
+ }
391
+
392
+ if (args.voltarPara) return projeto.voltarPara(args.id, args.voltarPara);
393
+
394
+ if (!args.plano && !args.cenas && !args.roteiro) {
395
+ const atual = projeto.lerPlano(args.id);
396
+ if (!atual) return { ok: false, error: 'este projeto ainda não tem plano — mande um.' };
397
+ return { ok: true, plano: atual, resumo: plano.resumo(atual) };
398
+ }
399
+
400
+ /* O ROTEIRO: o modelo diz o que cada parte é e o que ela diz, e o código
401
+ faz o resto — layout, voz com entonação, ícones, imagens, música e
402
+ sons (lib/plugin/estudio/composicao.js). É o caminho para qualquer modelo
403
+ entregar motion e slides que prestam. */
404
+ if (args.roteiro) {
405
+ /* O roteiro como a pessoa (ou o modelo) mandou: o híbrido traduz as
406
+ partes para o cinema no caminho, e o que fica guardado tem de ser o
407
+ original — senão o próximo ajuste parte do traduzido. */
408
+ let original = null;
409
+ try { original = JSON.parse(typeof args.roteiro === 'string' ? args.roteiro : JSON.stringify(args.roteiro)); } catch { original = args.roteiro; }
410
+ const r = await prepararRoteiro(p, args);
411
+ if (!r.ok) return r;
412
+ /* SEM NARRAÇÃO: o som sobe de papel — um efeito leve em cada corte e em
413
+ cada entrada marcante, variando (sem-narracao.js, sons-leves.js). */
414
+ if (args.__semNarracao) {
415
+ const n = semNarracao.sonorizarPlano(r, { tempos: args.__semNarracao.tempos, cues: args.__semNarracao.cues, sons: sonsLeves.preparar(p.pasta) });
416
+ if (r.resumo) r.resumo.semNarracao = true;
417
+ projeto.anotar(p.id, 'plano', `sem narração: ${n} efeitos leves nos cortes, entradas e micros`);
418
+ } else if (args.__barulhinhos && r.plano) {
419
+ // Com voz: os micros e os sons pedidos pela cena, baixinho por baixo da fala.
420
+ const n = semNarracao.sonorizarPlano(r, { tempos: args.__barulhinhos.tempos, cues: args.__barulhinhos.cues, sons: sonsLeves.preparar(p.pasta), comVoz: true });
421
+ if (n) projeto.anotar(p.id, 'plano', `barulhinhos: ${n} micros por baixo da fala`);
422
+ }
423
+ const ic = await variarIcones(r.plano, original);
424
+ if (ic.trocados) projeto.anotar(p.id, 'icones', `coleção ${ic.colecao}: ${ic.trocados} ícones`);
425
+ let conferida = plano.conferir(r.plano, { pasta: p.pasta });
426
+ /* A rede de segurança: o elemento que não passa sai, e o vídeo segue.
427
+ Um defeito num ícone não pode custar o vídeo inteiro. */
428
+ if (!conferida.ok) {
429
+ projeto.anotar(p.id, 'defeito', `plano do roteiro reprovou: ${conferida.problemas.slice(0, 4).map((x) => x.onde + ' ' + x.oque).join(' | ')}`);
430
+ const ruins = new Set(conferida.problemas.map((x) => (String(x.onde).match(/^cenas\[(\d+)\]\.elementos\[(\d+)\]/) || []).slice(1, 3).join(':')).filter((k) => k.includes(':')));
431
+ r.plano.cenas.forEach((c, i) => { c.elementos = c.elementos.filter((_, j) => !ruins.has(`${i}:${j}`)); });
432
+ conferida = plano.conferir(r.plano, { pasta: p.pasta });
433
+ }
434
+ if (!conferida.ok) {
435
+ return { ok: false, error: 'o roteiro virou um plano com problemas (defeito do PrimoCode, não seu).', problemas: conferida.problemas.slice(0, 12) };
436
+ }
437
+ projeto.salvarPlano(args.id, r.plano, args.motivo || 'montado do roteiro');
438
+ // O roteiro fica guardado: ajustar uma frase é mandar o roteiro de novo, não reescrever tudo.
439
+ try { fs.writeFileSync(path.join(p.pasta, 'roteiro.json'), JSON.stringify(original || args.roteiro, null, 2)); } catch { /* segue */ }
440
+ projeto.salvar(args.id, { duracao: conferida.duracao });
441
+ /* A memória da estrutura (diretor.cardapioEstruturas): o próximo roteiro
442
+ vê o que este usou. Uma vez por projeto — mandar o roteiro de novo
443
+ para ajustar uma frase não é um vídeo novo. */
444
+ if (!p.estrutura) {
445
+ const usada = diretor.registrarEstrutura(original || args.roteiro);
446
+ projeto.salvar(args.id, { estrutura: usada.estrutura || '-' });
447
+ }
448
+ const quebradas = args.__cenasQuebradas || [];
449
+ /* NENHUMA CENA ESCRITA (14/10, a padaria da 10.11.0 saiu toda no
450
+ gerativo): a regra morava só na skill, e regra escrita não é regra
451
+ obedecida. O plano volta com o cardápio na mão — a IA ainda decide. */
452
+ const pts = Array.isArray(original) ? original : (original && original.partes) || [];
453
+ const nenhuma = pts.length > 1 && !pts.some((pt) => pt && pt.componente) && !quebradas.length;
454
+ return {
455
+ ok: true, duracao: conferida.duracao, ...r.resumo, resumo: plano.resumo(r.plano),
456
+ ...(quebradas.length ? { cenasQuebradas: quebradas } : {}),
457
+ ...(nenhuma ? { nenhumaCenaEscrita: {
458
+ aviso: 'Todas as partes caíram no gerativo automático. Para motion de verdade, escreva ao menos uma cena (componente), partindo de um destes efeitos (estudio_midia usar-efeito) se servir, e mande o roteiro de novo. Cada parte pode pedir som: sons:[{t, som}] (pop, mouse, tique, digital, swoosh, sub, ponto1..ponto5). Se o automático é o que você quer, siga para o render.',
459
+ efeitos: efeitos.cardapio().slice(0, 6),
460
+ } } : {}),
461
+ proximo: quebradas.length
462
+ ? `${quebradas.length} cena(s) sua(s) não compilaram e ficaram no gerativo: conserte o arquivo (o erro está em cenasQuebradas) e mande o roteiro de novo antes do render.`
463
+ : 'estudio_render com este id. Para ajustar, mande o roteiro de novo (é rápido) — não edite as cenas à mão.',
464
+ };
465
+ }
466
+
467
+ // Um plano inteiro, ou só as cenas (que é o caso comum).
468
+ let novo = args.plano || { formato: args.formato, cenas: args.cenas, audio: args.audio };
469
+
470
+ /* Ajuste de UMA cena, sem reescrever o resto.
471
+ *
472
+ * É o caminho de "não gostei da parte do cartão": reescrever o plano
473
+ * inteiro para mexer numa cena é como o vídeo antigo mudava de cara
474
+ * sozinho a cada correção. */
475
+ if (args.cena != null) {
476
+ const atual = projeto.lerPlano(args.id);
477
+ if (!atual) return { ok: false, error: 'não há plano para ajustar.' };
478
+ const i = Number(args.cena) - 1;
479
+ if (!(i >= 0 && i < atual.cenas.length)) {
480
+ return { ok: false, error: `a cena ${args.cena} não existe (são ${atual.cenas.length}).` };
481
+ }
482
+ atual.cenas[i] = args.plano || args.novaCena || atual.cenas[i];
483
+ novo = atual;
484
+ }
485
+
486
+ const conferida = plano.conferir(novo, { pasta: p.pasta });
487
+ if (!conferida.ok) {
488
+ return {
489
+ ok: false,
490
+ error: 'o plano tem problemas que quebrariam o render — conserte e mande de novo.',
491
+ problemas: conferida.problemas.slice(0, 12),
492
+ };
493
+ }
494
+
495
+ projeto.salvarPlano(args.id, novo, args.motivo || '');
496
+ projeto.salvar(args.id, { duracao: conferida.duracao });
497
+ return {
498
+ ok: true, duracao: conferida.duracao, resumo: plano.resumo(novo),
499
+ proximo: 'estudio_render quando estiver pronto.',
500
+ };
501
+ }
502
+
503
+ // ── estudio_midia ────────────────────────────────────────────────────────
504
+
505
+ async function ferramentaMidia(args) {
506
+ const acao = String(args.acao || 'imagem').toLowerCase();
507
+ const p = args.id ? projeto.ler(args.id) : null;
508
+ if (args.id && !p) return semProjeto(args.id);
509
+
510
+ if (acao === 'projetos') return require('./projetos.js').procurar({ termo: args.termo, categoria: args.categoria, limite: args.limite });
511
+ if (acao === 'projeto') return require('./projetos.js').ver(args.nome || args.id_item || args.termo, { c: await require('../../config/limites.js').situacao() });
512
+
513
+ if (acao === 'fontes') {
514
+ if (args.conferir) return assets.conferirFonte(args.conferir);
515
+ return { ok: true, fontes: assets.FONTES, biblioteca: biblioteca.cardapio(),
516
+ nota: 'qualquer família do Google Fonts funciona — esta lista é para não repetir sempre as mesmas.' };
517
+ }
518
+
519
+ /* Recortar o fundo. O pedido pede "buscar PNGs na internet, remover fundo
520
+ e inserir" — e sem isto o agente colava a foto com o retângulo branco
521
+ dela por cima do fundo da cena, que é o cara-de-recorte que denuncia
522
+ vídeo feito às pressas. O recorte real é modelo de segmentação (rembg);
523
+ sem ele na máquina, sobra o corte por cor, que só serve em fundo
524
+ chapado — e a resposta diz qual dos dois foi usado. */
525
+ if (acao === 'semfundo' || acao === 'sem-fundo' || acao === 'recortar') {
526
+ const alvo = args.arquivo || args.src;
527
+ if (!alvo) return { ok: false, error: 'diga o arquivo (arquivo) da imagem a recortar.' };
528
+ const cheio = p ? path.resolve(p.pasta, alvo) : path.resolve(alvo);
529
+ const r = await acervo.tirarFundo(cheio, { cor: args.cor, tolerancia: args.tolerancia });
530
+ if (!r.ok) return r;
531
+ const relativo = p ? path.relative(p.pasta, r.arquivo).replace(/\\/g, '/') : r.arquivo;
532
+ if (p) projeto.anotar(p.id, 'midia', `recortou o fundo de ${alvo} (${r.metodo})`);
533
+ return { ok: true, src: relativo, metodo: r.metodo, aviso: r.aviso || undefined };
534
+ }
535
+
536
+ /* O print de verdade do site (print-site.js), para a peça 3D `printsite`.
537
+ Só roda quando o modelo pede: o cardápio diz quando vale. */
538
+ if (acao === 'print') {
539
+ if (!p) return { ok: false, error: 'para tirar o print é preciso dizer em qual projeto (id).' };
540
+ const r = await printSite.capturarSite(args.url || args.site || args.termo, { pasta: p.pasta, celular: !!args.celular, inteira: args.inteira !== false });
541
+ if (r.ok) projeto.anotar(p.id, 'midia', `print de ${r.url} (${r.tela}): ${r.src}`);
542
+ return r;
543
+ }
544
+
545
+ /* O ELEMENTO do site, tirado pelo código (print-site.js): a lista das peças
546
+ (logo, botão, cartão, título…) e uma peça sozinha, com o fundo transparente. */
547
+ /* A REFERÊNCIA VISUAL que a pessoa manda (13/10: "não usa as referências
548
+ que mandei" — era o print da landing, arrastado no pedido). O agente não
549
+ enxerga imagem; aqui ela entra no projeto, as cores saem pelo ffmpeg e,
550
+ se o projeto ainda não tem marca, viram a marca. Com site, o site manda. */
551
+ if (acao === 'referencia' || acao === 'referência') {
552
+ if (!p) return semProjeto(args.id);
553
+ return importarReferencia(p, String(args.arquivo || args.caminho || args.src || ''));
554
+ }
555
+
556
+ if (acao === 'elementos') return printSite.elementosDoSite(args.url || args.site || args.termo, { celular: !!args.celular });
557
+ if (acao === 'elemento') {
558
+ if (!p) return { ok: false, error: 'para tirar o elemento é preciso dizer em qual projeto (id).' };
559
+ const r = await printSite.capturarElemento(args.url || args.site, { pasta: p.pasta, seletor: args.seletor, texto: args.texto || args.termo,
560
+ celular: !!args.celular, transparente: args.transparente !== false, margem: args.margem });
561
+ if (r.ok) projeto.anotar(p.id, 'midia', `elemento de ${r.url} (${args.seletor || args.texto || args.termo}): ${r.src}`);
562
+ return r;
563
+ }
564
+
565
+ // O catálogo de efeitos que a IA escreveu (efeitos.js): guardar, listar, reusar.
566
+ if (acao === 'efeitos') return { ok: true, efeitos: efeitos.cardapio(),
567
+ // A lista de técnicas mora aqui, e não na skill: a skill vai em todo pedido de vídeo e o teto é curto.
568
+ tecnicas: 'cor (ondas que inundam, paleta que vira na batida) · luz (faixa no título, bloom que respira, feixes, partículas) · física (antecipa, cai com peso, amassa no pouso, rebote; spring com massa, nunca linear) · 3D (perspective + rotateX: entra deitado e levanta, sombra no chão, câmera que orbita) · tipografia (letras que se montam, peso que pulsa, máscara que revela). Vídeo sobre site: tire a peça que conta a história com estudio_site elemento (PNG sem fundo) e anime ELA — peca-impacto-3d é ponto de partida, não molde.' };
569
+ if (acao === 'guardar-efeito' || acao === 'usar-efeito') {
570
+ if (!p) return { ok: false, error: 'diga em qual projeto (id).' };
571
+ const r = acao === 'guardar-efeito'
572
+ ? efeitos.guardar({ pasta: p.pasta, arquivo: args.arquivo || args.src, nome: args.nome, descricao: args.descricao, tags: args.tags })
573
+ : efeitos.reusar({ pasta: p.pasta, nome: args.nome });
574
+ if (r.ok) projeto.anotar(p.id, 'midia', `${acao === 'guardar-efeito' ? 'guardou' : 'reusou'} o efeito ${r.nome || args.nome}`);
575
+ return r;
576
+ }
577
+
578
+ if (acao === 'logo') {
579
+ if (!p) return { ok: false, error: 'para baixar a logo é preciso dizer em qual projeto (id).' };
580
+ const nome = String(args.marca || args.nome || args.termo || '').trim();
581
+ if (!nome) return { ok: false, error: 'diga a marca (marca).' };
582
+ let html = '';
583
+ let site = String(args.site || args.url || '').trim();
584
+ if (!site) {
585
+ const achado = await identidade.acharSite(nome);
586
+ if (achado.ok) site = achado.url;
587
+ }
588
+ if (site) {
589
+ if (!/^https?:\/\//i.test(site)) site = 'https://' + site;
590
+ html = (await require('../../referencia.js').pegar(site, { timeout: 15000 })) || '';
591
+ }
592
+ const r = await identidade.pegarLogo(html, site || 'https://exemplo.invalido', { pasta: p.pasta, nome });
593
+ if (r.ok) projeto.anotar(p.id, 'midia', `logo de ${nome}: ${r.src} (${r.achadaEm})`);
594
+ return r;
595
+ }
596
+
597
+ /* A BIBLIOTECA (colecao.js, 11/10): o cardápio inteiro, o ícone 3D e a
598
+ animação pronta. Procurar não usa rede (o índice mora no pacote); com
599
+ id, baixa para o projeto e devolve o elemento pronto. */
600
+ /* OS MOVIMENTOS (movimentos.js, 12/10): 100+ entradas, saídas, ênfases e loops com nome. */
601
+ if (acao === 'movimentos' || acao === 'movimento') {
602
+ return movimentos.procurar({ termo: args.termo, categoria: args.categoria, limite: Number(args.limite) || 30 });
603
+ }
604
+ /* OS CENÁRIOS (cenarios.js, 12/10): os lugares prontos + os que a IA criou
605
+ e a pessoa deixou guardar. Salvar só com o sim dela (autorizado:true). */
606
+ if (acao === 'cenarios' || acao === 'cenários') {
607
+ return { ok: true, prontos: Object.keys(mundo.LUGARES), salvos: cenarios.listar(),
608
+ comoCriar: 'na cena do estilo personagem: lugar (um pronto como base), ceu [cor de cima, cor do horizonte], chao {tipo, cor, cor2}, parede, luz, acento, hora e elementos. Ficou bom? Pergunte se pode salvar e use acao:"salvar_cenario".' };
609
+ }
610
+ if (acao === 'salvar_cenario' || acao === 'salvar_cenário') {
611
+ return cenarios.salvar({ nome: args.nome, cenario: args.cenario, autorizado: args.autorizado, bases: Object.keys(mundo.LUGARES) });
612
+ }
613
+ /* OS ESTILOS (estilos.js, 14/10): as peças do gerativo como cardápio — a IA
614
+ monta, mistura e cria; guardar só com o sim da pessoa. */
615
+ if (acao === 'estilos' || acao === 'estilo') return estilos.cardapio();
616
+ if (acao === 'salvar_estilo') return estilos.salvar({ nome: args.nome, pecas: args.pecas || args.estilo, descricao: args.descricao, autorizado: args.autorizado });
617
+ if (acao === 'biblioteca' || acao === 'cardapio' || acao === 'cardápio') return colecao.cardapio();
618
+ if (acao === 'icones3d' || acao === 'icone3d' || acao === 'animacoes' || acao === 'animacao' || acao === 'animação' || acao === 'animações') {
619
+ const ehAnim = /^anima/.test(acao);
620
+ if (args.id_item || /^(fluent3d|noto):/.test(String(args.item || args.baixar || ''))) {
621
+ const pj = p ? projeto.ler(p.id) : null;
622
+ const fmt = (pj && pj.formato) || {};
623
+ const r = await colecao.baixar(args.id_item || args.item || args.baixar, { pasta: p ? p.pasta : null, largura: fmt.largura || 1920, altura: fmt.altura || 1080 });
624
+ if (r.ok && p) projeto.anotar(p.id, 'midia', `biblioteca: ${r.src} (${r.licenca})`);
625
+ return r;
626
+ }
627
+ return ehAnim ? colecao.procurarAnimacoes(args.termo || args.busca || '', { quantas: Number(args.quantas) || 10 })
628
+ : colecao.procurarIcones3d(args.termo || args.busca || '', { quantas: Number(args.quantas) || 10 });
629
+ }
630
+
631
+ if (acao === 'icones' || acao === 'icone') {
632
+ if (args.nome) {
633
+ const r = await assets.icone(args.nome, { pasta: p ? p.pasta : null });
634
+ return r.ok ? { ok: true, nome: args.nome, baixado: true } : r;
635
+ }
636
+ return assets.procurarIcones(args.termo || args.busca || '');
637
+ }
638
+
639
+ if (acao === 'som' || acao === 'audio' || acao === 'trilha' || acao === 'efeito') {
640
+ const busca = await assets.procurarSom(args.termo || '', {
641
+ quantas: Number(args.quantas) || 8,
642
+ duracaoMin: acao === 'trilha' ? 30 : 0,
643
+ duracaoMax: acao === 'efeito' ? 6 : 0,
644
+ });
645
+ if (!busca.ok || !args.baixar) return busca;
646
+ return baixarEscolhido(busca.sons, args, p);
647
+ }
648
+
649
+ const busca = await assets.procurarImagens(args.termo || '', {
650
+ quantas: Number(args.quantas) || 8,
651
+ transparente: !!args.transparente,
652
+ });
653
+ if (!busca.ok || !args.baixar) return busca;
654
+ return baixarEscolhido(busca.imagens, args, p);
655
+ }
656
+
657
+ async function baixarEscolhido(lista, args, p) {
658
+ if (!p) return { ok: false, error: 'para baixar é preciso dizer em qual projeto (id).' };
659
+ const i = Number(args.baixar) === true ? 0 : Math.max(0, Number(args.baixar) - 1 || 0);
660
+ const item = lista[i];
661
+ if (!item) return { ok: false, error: `não há o item ${args.baixar} nessa busca.` };
662
+ const r = await assets.baixar(item, { pasta: p.pasta, nome: args.nome });
663
+ if (r.ok) {
664
+ projeto.anotar(p.id, 'midia', `baixou "${item.titulo}" (${item.licenca || 'sem licença declarada'})`);
665
+ }
666
+ return { ...r, creditos: item.creditos || null,
667
+ comoUsar: r.ok ? `no plano: "src": "${r.relativo}"` : undefined };
668
+ }
669
+
670
+ // ── estudio_ae ───────────────────────────────────────────────────────────
671
+
672
+ /** O motor After Effects: roda o JSX do agente na pasta do projeto e devolve o mp4 e os quadros. */
673
+ async function ferramentaAE(args) {
674
+ const p = args.id ? projeto.ler(args.id) : null;
675
+ if (!args.id || !p) return semProjeto(args.id);
676
+ if (!args.script || !args.comp) return { ok: false, error: 'estudio_ae pede script (o JSX) e comp (o nome da composição).' };
677
+ return require('./cota.js').comCota(() => renderAE(args, p));
678
+ }
679
+
680
+ async function renderAE(args, p) {
681
+ const kitM = marcaKit.preencher(null, { pastas: [p.pasta, process.cwd()] });
682
+ const fontesKit = kitM && kitM.kit ? [kitM.fontes && kitM.fontes.titulo, kitM.fontes && kitM.fontes.texto].filter(Boolean) : [];
683
+ const r = await require('./effectcraft.js').renderizar({
684
+ pasta: p.pasta, script: String(args.script), comp: String(args.comp),
685
+ fontes: [...new Set([...(Array.isArray(args.fontes) ? args.fontes : []), ...fontesKit])], audio: args.audio || undefined,
686
+ conferir: Array.isArray(args.conferir) ? args.conferir : [],
687
+ });
688
+ if (!r.ok) return r;
689
+ const daMarca = kitM && kitM.kit ? { marca: { nome: kitM.nome, cores: kitM.cores, fontes: kitM.fontes, logo: kitM.logo } } : {};
690
+ return { ...r, ...daMarca, nota: 'Olhe os quadros (arquivos em ae/) antes de dar por pronto; ajuste o JSX e rode de novo se algo estiver torto.' };
691
+ }
692
+
693
+ // ── estudio_motion ───────────────────────────────────────────────────────
694
+
695
+ /** O pacote pra postar (exportar.js) + a galeria; nunca derruba o vídeo. `entrega:false` desliga. */
696
+ function entregar(args, p, r) {
697
+ const x = r._exportar || {}; delete r._exportar;
698
+ if (args.entrega === false) return;
699
+ try {
700
+ const E = require('./exportar.js');
701
+ const e = E.exportar({ video: r.video, pasta: p.pasta, assunto: args.assunto, formatos: args.formatos, cenas: x.cenas, palavras: x.palavras, trilha: r.trilha && { ...r.trilha, arquivo: x.trilhaArquivo }, sfx: x.sfx });
702
+ if (e.ok) {
703
+ r.entrega = { pasta: e.dir, arquivos: e.arquivos.map((f) => path.basename(f)), creditos: e.creditos, ...(e.avisos ? { avisos: e.avisos } : {}) };
704
+ E.registrar({ id: p.id, assunto: args.assunto, caminho: r.video, formato: r.formato, duracao: r.duracao, assinatura: r.assinatura, entrega: e.dir });
705
+ } else r.entrega = { erro: e.error };
706
+ } catch (err) { r.entrega = { erro: err.message }; }
707
+ }
708
+
709
+ /** A máquina de motion: assunto + cenas em JSON viram o mp4 (maquina.js), com sons, trilha e voz opcionais. */
710
+ async function ferramentaMotion(args) {
711
+ const p = args.id ? projeto.ler(args.id) : null;
712
+ if (!args.id || !p) return semProjeto(args.id);
713
+ let receita = null;
714
+ if (args.receita) {
715
+ const r = require('./projetos.js').ver(args.receita, { c: await require('../../config/limites.js').situacao() });
716
+ if (!r.ok) return r;
717
+ // Grátis vê o resumo da receita, não monta a partir dela: diz o porquê em vez de renderizar pela metade.
718
+ if (r.bloqueado) return { ok: false, error: r.aviso, projeto: r.projeto };
719
+ receita = r.projeto;
720
+ }
721
+ // primeiro motion: aprende o gosto antes de renderizar (a pessoa pode fechar ou pular; o render segue de qualquer jeito)
722
+ // no terminal abre o navegador; no app (desktop ou Primo.app, -p com PRIMOCODE_APP=1) o app abre a tela pela linha de protocolo
723
+ try { await require('./gosto.js').antesDoMotion(args); } catch { /* sem tela, segue */ }
724
+ return require('./cota.js').comCota(() => renderMotion(args, p, receita));
725
+ }
726
+
727
+ async function renderMotion(args, p, receita) {
728
+ const narrar = async (texto, mp3, voz) => rodarPython('narrar.py', ['falar', '--texto', texto, '--saida', mp3, '--voz', String(voz || 'francisca')], { timeout: 5 * 60000 });
729
+ // Kit de marca ativo: cores, fontes e logo entram onde o JSON não disse; o logo vai no CTA (última cena).
730
+ const kitM = marcaKit.preencher(args.marca, { pastas: [p.pasta, process.cwd()] });
731
+ if (kitM && kitM.kit) {
732
+ args = { ...args, marca: kitM };
733
+ if (kitM.logo && Array.isArray(args.cenas) && args.cenas.length) {
734
+ args.cenas = args.cenas.map((c, i) => (i === args.cenas.length - 1 && c && !c.logo ? { ...c, logo: kitM.logo } : c));
735
+ }
736
+ }
737
+ // As fotos do pedido: as que a IA passou em `fotos` e as que o terminal achou no texto do pedido (referencias.imagens()).
738
+ // Antes só o prepararRoteiro (Remotion) as lia: no motion elas viravam "referência" e nenhuma peça aceitava foto.
739
+ const doPedido = referencias.imagens();
740
+ const dadas = Array.isArray(args.fotos) ? args.fotos : (args.fotos ? [args.fotos] : []);
741
+ const todas = [...new Set([...dadas, ...doPedido])];
742
+ if (todas.length) args = { ...args, fotos: todas, ...(dadas.length ? {} : { fotosImplicitas: true }) };
743
+ const r = await require('./maquina.js').motion(args, { pasta: p.pasta, receita, deps: { narrar } });
744
+ if (r.ok) projeto.anotar(p.id, 'motion', `${r.duracao}s, ${r.cenas.length} cenas, ${r.lufs} LUFS`);
745
+ if (r.ok) entregar(args, p, r);
746
+ if (!r.ok) return r;
747
+ const gostoResumo = (() => { try { const G = require('./gosto.js'); return G.resumo(G.ler()); } catch { return ''; } })();
748
+ return { ...r, ...(gostoResumo ? { gosto: gostoResumo } : {}), nota: 'Abra os quadros (png em ae/) para conferir. Se algo ficou torto, mude o JSON e rode de novo.' };
749
+ }
750
+
751
+ // ── estudio_criar ────────────────────────────────────────────────────────
752
+
753
+ /** A porta simples (criar.js): escolhe a receita e chama as ferramentas de cima. `ctx.progresso(pct, etapa)` alimenta o item da tela. */
754
+ async function ferramentaCriar(args, ctx = {}) {
755
+ return require('./criar.js').criar(args, {
756
+ projeto,
757
+ plano: (a) => ferramentaPlano({ ...a, __pasta: ctx.projectDir }),
758
+ motion: (a) => ferramentaMotion(a),
759
+ render: (a) => ferramentaRender({ ...a, __pasta: ctx.projectDir }, ctx),
760
+ progresso: ctx.progresso,
761
+ });
762
+ }
763
+
764
+ // ── estudio_editar ───────────────────────────────────────────────────────
765
+
766
+ /** O editor por comando: reabre o plano da máquina de motion, aplica as mudanças e guarda a versão (editor.js). */
767
+ async function ferramentaEditar(args) {
768
+ const id = args.id_video || args.id;
769
+ const p = id ? projeto.ler(id) : null;
770
+ if (!p) return semProjeto(id);
771
+ const r = await require('./editor.js').editar(args, { pasta: p.pasta });
772
+ if (r.ok && r.versao && !args.listar) projeto.anotar(p.id, 'editar', `v${r.versao}: ${(r.feitas || [r.nota || '']).join('; ').slice(0, 120)}`);
773
+ return r.ok && r.video ? { ...r, nota: r.nota || 'Mostre o vídeo. Se não era isso, mude de novo ou use voltar_para.' } : r;
774
+ }
775
+
776
+ // ── estudio_narrar ───────────────────────────────────────────────────────
777
+
778
+ async function ferramentaNarrar(args) {
779
+ if (args.vozes) return rodarPython('narrar.py', ['vozes'], { timeout: 30000 });
780
+
781
+ const p = projetoOuRecente(args.id);
782
+ if (!p) return semProjeto(args.id);
783
+ if (args.id == null || String(args.id).trim() === '') args = { ...args, id: p.id };
784
+ const texto = String(args.texto || '').trim();
785
+ if (!texto) return { ok: false, error: 'não há texto para narrar.' };
786
+
787
+ const saida = path.join(p.pasta, 'midia', `narracao-${Date.now().toString(36)}.mp3`);
788
+ fs.mkdirSync(path.dirname(saida), { recursive: true });
789
+
790
+ const r = await rodarPython('narrar.py', [
791
+ 'falar', '--texto', texto, '--saida', saida,
792
+ '--voz', String(args.voz || 'antonio'),
793
+ '--estilo', String(args.estilo || 'normal'),
794
+ ...(args.ritmo ? ['--ritmo', String(args.ritmo)] : []),
795
+ ...(args.tom ? ['--tom', String(args.tom)] : []),
796
+ ], { timeout: 5 * 60000 });
797
+
798
+ if (!r.ok) return r;
799
+ const relativo = path.relative(p.pasta, saida).replace(/\\/g, '/');
800
+ projeto.anotar(p.id, 'narracao', `${r.segundos}s na voz ${args.voz || 'antonio'}`);
801
+ return {
802
+ ...r, relativo,
803
+ comoUsar: `no plano: "audio": {"narracao": "${relativo}"}. `
804
+ + 'Os tempos de "falas" são MEDIDOS — use-os para a duração de cada cena e para as legendas, '
805
+ + 'em vez de estimar por número de palavras.',
806
+ };
807
+ }
808
+
809
+ // ── estudio_video ────────────────────────────────────────────────────────
810
+
811
+ async function ferramentaVideo(args, ctx = {}) {
812
+ const acao = String(args.acao || 'medir').toLowerCase();
813
+ const p = projetoOuRecente(args.id);
814
+ if (!p) return semProjeto(args.id);
815
+ if (args.id == null || String(args.id).trim() === '') args = { ...args, id: p.id };
816
+
817
+ const pronto = video.conferir();
818
+ if (!pronto.ok) return pronto;
819
+
820
+ const dentro = (rel) => {
821
+ const cheio = path.resolve(p.pasta, String(rel || ''));
822
+ return cheio.startsWith(path.resolve(p.pasta)) ? cheio : null;
823
+ };
824
+
825
+ if (acao === 'importar') {
826
+ // O vídeo da pessoa entra na pasta do projeto. Trabalhar a partir de
827
+ // onde ele está é o caminho para o agente escrever em cima do
828
+ // original — e o original dela não tem cópia.
829
+ const de = path.resolve(String(args.arquivo || '').replace(/^~(?=$|[/\\])/, os.homedir()));
830
+ if (!fs.existsSync(de)) return { ok: false, error: `não achei "${args.arquivo}".` };
831
+ const para = path.join(p.pasta, 'entrada', path.basename(de));
832
+ fs.copyFileSync(de, para);
833
+ const m = await video.medir(para);
834
+ projeto.anotar(p.id, 'entrada', `importou ${path.basename(de)} (${m.ok ? m.segundos + 's' : '?'})`);
835
+ return { ok: true, arquivo: path.relative(p.pasta, para).replace(/\\/g, '/'), medida: m };
836
+ }
837
+
838
+ const alvo = dentro(args.arquivo);
839
+ if (!alvo || !fs.existsSync(alvo)) {
840
+ return { ok: false, error: `"${args.arquivo}" não está na pasta do projeto. Use acao:"importar" antes.` };
841
+ }
842
+
843
+ if (acao === 'medir') return video.medir(alvo);
844
+
845
+ if (acao === 'silencio' || acao === 'pausas') {
846
+ const s = await video.silencios(alvo, { limiarDb: Number(args.limiarDb) || -40 });
847
+ if (!s.ok) return s;
848
+ const m = await video.medir(alvo);
849
+ return {
850
+ ok: true, silencios: s.silencios,
851
+ ficariam: video.trechosQueFicam(m.segundos, s.silencios, args),
852
+ };
853
+ }
854
+
855
+ if (acao === 'cortar-silencio' || acao === 'cortar') {
856
+ const saida = path.join(p.pasta, 'midia', `cortado-${Date.now().toString(36)}.mp4`);
857
+ const r = await video.cortarSilencio(alvo, saida, args);
858
+ if (r.ok && !r.semCorte) {
859
+ projeto.anotar(p.id, 'corte', `${r.antes}s → ${r.depois}s, ${r.cortes} cortes`);
860
+ r.relativo = path.relative(p.pasta, saida).replace(/\\/g, '/');
861
+ }
862
+ return r;
863
+ }
864
+
865
+ if (acao === 'quadro') {
866
+ const saida = path.join(p.pasta, 'midia', `quadro-${Math.round(Number(args.segundo) || 0)}s.png`);
867
+ const r = await video.quadro(alvo, saida, Number(args.segundo) || 0);
868
+ if (r.ok) r.relativo = path.relative(p.pasta, saida).replace(/\\/g, '/');
869
+ return r;
870
+ }
871
+
872
+ if (acao === 'legendas' || acao === 'transcrever') {
873
+ return transcrever(p, alvo, ctx);
874
+ }
875
+
876
+ /* A EDIÇÃO INTEIRA, em código (lib/plugin/estudio/edicao.js): corta o silêncio,
877
+ transcreve palavra por palavra e monta o plano — legenda animada,
878
+ ícones na hora da palavra, zoom de corte, pop e whoosh. É o caminho
879
+ para qualquer modelo entregar vídeo de videomaker: ele só chama isto e
880
+ renderiza. "Até uma batata faz vídeos assim." (25/09/2026) */
881
+ if (acao === 'editar' || acao === 'edicao' || acao === 'auto') {
882
+ let fonte = alvo;
883
+ let cortes = 0;
884
+ if (args.cortarSilencio !== false) {
885
+ const saida = path.join(p.pasta, 'midia', `cortado-${Date.now().toString(36)}.mp4`);
886
+ const c = await video.cortarSilencio(alvo, saida, args);
887
+ if (c.ok && !c.semCorte) { fonte = saida; cortes = c.cortes || 0; }
888
+ }
889
+ /* A VOZ NO VOLUME CERTO. A gravação de celular sai baixa (medido em
890
+ 25/09: -37,6 dB de média no vídeo pronto, e "está sem som"). O
891
+ loudnorm leva a fala a -15 LUFS, o volume de vídeo de internet; o
892
+ vídeo em si não é recodificado. */
893
+ const normal = path.join(p.pasta, 'midia', `voz-normal-${Date.now().toString(36)}.mp4`);
894
+ const ln = await video.rodar(video.ffmpeg(), ['-y', '-i', fonte, '-c:v', 'copy',
895
+ '-af', 'loudnorm=I=-15:TP=-1.5:LRA=11', '-c:a', 'aac', '-b:a', '192k', normal], { timeout: 10 * 60000 });
896
+ if (ln.ok) fonte = normal;
897
+
898
+ const m = await video.medir(fonte);
899
+ if (!m.ok) return m;
900
+
901
+ const tr = await transcrever(p, fonte, ctx);
902
+ if (!tr.ok) return tr;
903
+ let palavras = tr.palavras || [];
904
+ // Servidor sem o tempo por palavra: reparte cada trecho pelas palavras
905
+ // dele. Sai menos preciso, mas a legenda continua animada.
906
+ if (!palavras.length) palavras = repartirTrechos(tr.trechos || []);
907
+
908
+ const candidatos = [...new Set(palavras.map((w) => edicao.iconeDe(w.texto)).filter(Boolean))];
909
+ const iconesOk = new Set();
910
+ for (const nome of candidatos) {
911
+ try { const r = await assets.icone(nome); if (r && (r.ok !== false)) iconesOk.add(nome); } catch { /* fica sem */ }
912
+ }
913
+ const sons = await edicao.prepararSons(p.pasta, video);
914
+
915
+ // As imagens de apoio: uma por termo, a primeira que baixar.
916
+ const imagens = {};
917
+ if ((args.estilo || 'viral') !== 'sem-apoio') {
918
+ const orientacao = m.largura >= m.altura ? 'landscape' : 'portrait';
919
+ for (const termo of edicao.termosDeApoio(palavras).slice(0, 8)) {
920
+ imagens[termo] = await baixarApoio(p, termo, { orientacao, video: true });
921
+ if (!imagens[termo]) delete imagens[termo];
922
+ }
923
+ }
924
+
925
+ // A música de fundo: uma trilha longa, de licença aberta.
926
+ let trilha = null;
927
+ if (args.musica !== false) {
928
+ try {
929
+ const b = await assets.procurarMusica(args.trilha || 'upbeat corporate', { quantas: 6, duracaoMin: 45 });
930
+ for (const item of (b.ok ? b.sons : [])) {
931
+ const d = await assets.baixar(item, { pasta: p.pasta, nome: 'trilha' });
932
+ if (d.ok) { trilha = d.relativo; break; }
933
+ }
934
+ } catch { /* segue sem música */ }
935
+ }
936
+
937
+ const base = {
938
+ src: path.relative(p.pasta, fonte).replace(/\\/g, '/'),
939
+ duracao: m.segundos, palavras, largura: m.largura, altura: m.altura,
940
+ estilo: args.estilo || 'viral', sons, iconesOk, imagens, trilha,
941
+ };
942
+ let montado = edicao.montarEdicao(base);
943
+ if (!montado.ok) return montado;
944
+
945
+ /* A segunda passada: nas frases escolhidas, a pessoa recortada na
946
+ frente da palavra gigante. Só os trechos que entram são recortados
947
+ (2 s cada), não o vídeo inteiro — recortar 52 s levaria minutos. */
948
+ if ((args.estilo || 'viral') === 'viral' && args.recorte !== false) {
949
+ const recortes = {};
950
+ for (const [i, info] of montado.infos.entries()) {
951
+ if (!info.recorte || !info.forte || info.forte.peso < 9 || Object.keys(recortes).length >= 3) continue;
952
+ const de = Math.max(0, info.forte.de - 0.15);
953
+ const ate = Math.min(info.dur, de + 2.2);
954
+ if (ate - de < 1) continue;
955
+ const seg = path.join(p.pasta, 'midia', `seg-${i + 1}-${Date.now().toString(36)}.mp4`);
956
+ const corte = await video.rodar(video.ffmpeg(), ['-y', '-ss', String(info.ini + de), '-t', String(ate - de), '-i', fonte,
957
+ '-vf', `scale=${Math.min(1280, m.largura)}:-2`, '-an', '-c:v', 'libx264', '-preset', 'veryfast', seg], { timeout: 120000 });
958
+ if (!corte.ok) continue;
959
+ const saida = path.join(p.pasta, 'midia', `pessoa-${i + 1}-${Date.now().toString(36)}.webm`);
960
+ const r = await rodarPessoa(['recortar', '--entrada', seg, '--saida', saida], { timeout: 10 * 60000 });
961
+ try { fs.unlinkSync(seg); } catch { /* fica */ }
962
+ if (!r.ok) break; // sem MediaPipe, nenhum recorte vai dar: não tenta os outros
963
+ recortes[i] = { src: path.relative(p.pasta, saida).replace(/\\/g, '/'), de: Math.round(de * 100) / 100, ate: Math.round(ate * 100) / 100 };
964
+ }
965
+ if (Object.keys(recortes).length) montado = edicao.montarEdicao({ ...base, recortes });
966
+ }
967
+ const salvo = await ferramentaPlano({ id: args.id, plano: montado.plano, motivo: `edição automática (${args.estilo || 'viral'})` });
968
+ if (!salvo.ok) return salvo;
969
+ projeto.anotar(p.id, 'edicao', `${montado.resumo.cenas} cenas, ${montado.resumo.icones} ícones, ${cortes} cortes de silêncio`);
970
+ return {
971
+ ok: true, ...montado.resumo, cortesDeSilencio: cortes, duracao: salvo.duracao,
972
+ proximo: 'estudio_render com este id. Antes, se quiser, ajuste uma cena com estudio_plano cena:N '
973
+ + '(ex.: trocar um ícone, pôr uma imagem de apoio atrás).',
974
+ };
975
+ }
976
+
977
+ /* O VÍDEO EM CAMADAS (camadas.js, 14/10: "quero uma edição nesse nível"):
978
+ a pessoa só gravou a fala; a IA passa as batidas (forma do rosto, cena
979
+ de motion, destaque) e o Estúdio monta o bolo por cima. Sem batidas,
980
+ devolve uma proposta pela transcrição — a IA aceita ou muda. */
981
+ if (acao === 'camadas') {
982
+ const m = await video.medir(alvo);
983
+ if (!m.ok) return m;
984
+ // A transcrição fica guardada: a proposta e a montagem não pagam duas vezes.
985
+ const guardada = path.join(p.pasta, 'midia', `transcricao-${path.basename(alvo).replace(/\.[^.]+$/, '')}.json`);
986
+ let palavras = Array.isArray(args.palavras) && args.palavras.length ? args.palavras : null;
987
+ if (palavras) { try { fs.writeFileSync(guardada, JSON.stringify(palavras)); } catch { /* segue sem guardar */ } }
988
+ if (!palavras && fs.existsSync(guardada)) { try { palavras = JSON.parse(fs.readFileSync(guardada, 'utf8')); } catch { palavras = null; } }
989
+ if (!palavras) {
990
+ const tr = await transcrever(p, alvo, ctx);
991
+ if (!tr.ok) return tr;
992
+ palavras = (tr.palavras && tr.palavras.length) ? tr.palavras : repartirTrechos(tr.trechos || []);
993
+ try { fs.writeFileSync(guardada, JSON.stringify(palavras)); } catch { /* segue sem guardar */ }
994
+ }
995
+ const batidas = Array.isArray(args.batidas) && args.batidas.length ? args.batidas : null;
996
+ if (!batidas) {
997
+ return {
998
+ ok: true, proposta: camadas.propor(palavras, m.segundos), duracao: m.segundos,
999
+ comoUsar: 'é uma SUGESTÃO pela transcrição. Decida você: mude as formas, junte ou separe batidas, '
1000
+ + 'escreva a cena de motion de cada ideia (componentes/x.jsx, recebe {el, t, fps}; el.dados traz largura/altura do espaço livre, '
1001
+ + 'palavras com t, destaque, cores e fontes; a LEGENDA da fala já está no quadro, então a cena NÃO escreve a fala: desenha a ideia) ou use um efeito de fábrica pelo nome (estudio_midia acao:"efeitos"), '
1002
+ + 'e chame de novo com batidas:[{de, ate, rosto, cena?, destaque?, canto?, dados?}].',
1003
+ };
1004
+ }
1005
+ // A cena: arquivo da pasta (conferido antes do render) ou efeito de fábrica pelo nome.
1006
+ const problemas = [];
1007
+ const prontas = batidas.map((b, i) => {
1008
+ if (!b || !b.cena) return b;
1009
+ const cena = String(b.cena).trim();
1010
+ if (/[\\/]|\.(jsx|tsx|js)$/i.test(cena)) {
1011
+ const cheio = dentro(cena);
1012
+ if (!cheio || !fs.existsSync(cheio)) { problemas.push(`batidas[${i}]: a cena "${cena}" não está na pasta do projeto.`); return { ...b, cena: null }; }
1013
+ const conf = conferirCena(cheio);
1014
+ if (!conf.ok) { problemas.push(`batidas[${i}]: ${cena} — ${conf.erro}`); return { ...b, cena: null }; }
1015
+ return { ...b, cena };
1016
+ }
1017
+ const r = efeitos.reusar({ pasta: p.pasta, nome: cena });
1018
+ if (!r.ok) { problemas.push(`batidas[${i}]: ${r.error}`); return { ...b, cena: null }; }
1019
+ return { ...b, cena: r.src };
1020
+ });
1021
+ if (problemas.length) return { ok: false, error: 'as cenas têm problema — conserte e mande de novo.', problemas };
1022
+
1023
+ /* A voz no volume de vídeo de internet (-15 LUFS), como na edição
1024
+ automática; o vídeo em si não é recodificado. */
1025
+ let fonte = alvo;
1026
+ if (args.normalizar !== false) {
1027
+ const normal = path.join(p.pasta, 'midia', `voz-normal-${path.basename(alvo).replace(/\.[^.]+$/, '')}.mp4`);
1028
+ if (!fs.existsSync(normal)) {
1029
+ await video.rodar(video.ffmpeg(), ['-y', '-i', alvo, '-c:v', 'copy',
1030
+ '-af', 'loudnorm=I=-15:TP=-1.5:LRA=11', '-c:a', 'aac', '-b:a', '192k', normal], { timeout: 10 * 60000 });
1031
+ }
1032
+ if (fs.existsSync(normal)) fonte = normal;
1033
+ }
1034
+ const deitado = m.largura > m.altura;
1035
+ const montado = camadas.montar({
1036
+ src: path.relative(p.pasta, fonte).replace(/\\/g, '/'), duracao: m.segundos, palavras, batidas: prontas,
1037
+ largura: deitado ? 1920 : 1080, altura: deitado ? 1080 : 1920, fps: 30,
1038
+ origem: { largura: m.largura, altura: m.altura }, rosto: args.rosto || {}, acento: args.acento,
1039
+ sons: sonsLeves.preparar(p.pasta),
1040
+ });
1041
+ if (!montado.ok) return montado;
1042
+ const salvo = await ferramentaPlano({ id: args.id, plano: montado.plano, motivo: `vídeo em camadas (${montado.resumo.batidas} batidas)` });
1043
+ if (!salvo.ok) return salvo;
1044
+ projeto.anotar(p.id, 'edicao', `camadas: ${montado.resumo.batidas} batidas, ${montado.resumo.cenas} cenas de motion, ${montado.resumo.trocasDeForma} trocas de forma`);
1045
+ return {
1046
+ ok: true, ...montado.resumo, batidas: montado.batidas, duracao: salvo.duracao,
1047
+ proximo: 'estudio_render com este id. Para mudar uma batida, chame camadas de novo com a lista inteira.',
1048
+ };
1049
+ }
1050
+
1051
+ if (acao === 'recortar-pessoa' || acao === 'pessoa') {
1052
+ const saida = path.join(p.pasta, 'midia', `pessoa-${Date.now().toString(36)}.webm`);
1053
+ const r = await rodarPessoa([
1054
+ 'recortar', '--entrada', alvo, '--saida', saida,
1055
+ ...(args.suavizar != null ? ['--suavizar', String(args.suavizar)] : []),
1056
+ ...(args.encolher != null ? ['--encolher', String(args.encolher)] : []),
1057
+ ], { timeout: 40 * 60000 });
1058
+ if (r.ok) {
1059
+ r.relativo = path.relative(p.pasta, saida).replace(/\\/g, '/');
1060
+ r.comoUsar = 'é um vídeo com fundo TRANSPARENTE. Ponha-o como elemento de vídeo numa cena '
1061
+ + 'que tenha a imagem de fundo atrás — não precisa juntar os dois num arquivo.';
1062
+ projeto.anotar(p.id, 'pessoa', `recortou ${r.quadros} quadros`);
1063
+ }
1064
+ return r;
1065
+ }
1066
+
1067
+ return { ok: false, error: `não conheço a ação "${acao}".` };
1068
+ }
1069
+
1070
+ /* A mídia de apoio de um termo: vídeo do Pexels quando pedido e houver,
1071
+ senão uma foto. Devolve {src, tipo} ou null. O clipe sai sorteado entre
1072
+ os que os últimos vídeos não usaram (variedade.js), não o primeiro da
1073
+ busca — "o b-roll veio igual nos dois vídeos" (Joel, 05/10). */
1074
+ /** A foto editorial (Wikimedia, museu) que os últimos vídeos não usaram; o crédito fica no caderno. */
1075
+ async function baixarEditorial(p, termo) {
1076
+ try {
1077
+ const b = await assets.procurarEditorial(termo, { quantas: 8 });
1078
+ for (const item of variedade.ordenar(b.imagens, 'broll').slice(0, 4)) {
1079
+ const d = await assets.baixar(item, { pasta: p.pasta, nome: 'foto-' + termo });
1080
+ if (d.ok) { variedade.marcar('broll', item.url); projeto.anotar(p.id, 'creditos', item.creditos); return { src: d.relativo, tipo: 'imagem' }; }
1081
+ }
1082
+ } catch { /* sem foto */ }
1083
+ return null;
1084
+ }
1085
+
1086
+ async function baixarApoio(p, termo, { orientacao = null, video: querVideo = false } = {}) {
1087
+ if (querVideo) {
1088
+ try {
1089
+ const itens = await variedade.buscarSemRepetir(async (t) => {
1090
+ const b = await assets.procurarVideos(t, { quantas: 8, orientacao });
1091
+ return (b.ok ? b.videos : []).filter((v) => !v.duracao || v.duracao >= 3);
1092
+ }, termo);
1093
+ for (const item of itens.slice(0, 4)) {
1094
+ const d = await assets.baixar(item, { pasta: p.pasta, nome: 'apoio-' + termo });
1095
+ if (d.ok) { variedade.marcar('broll', item.url); return { src: d.relativo, tipo: 'video' }; }
1096
+ }
1097
+ } catch { /* cai para a foto */ }
1098
+ }
1099
+ try {
1100
+ const itens = await variedade.buscarSemRepetir(async (t) => {
1101
+ const b = await assets.procurarImagens(t, { quantas: 8, orientacao });
1102
+ return b.ok ? b.imagens : [];
1103
+ }, termo);
1104
+ for (const item of itens.slice(0, 4)) {
1105
+ const d = await assets.baixar(item, { pasta: p.pasta, nome: 'apoio-' + termo });
1106
+ if (d.ok) { variedade.marcar('broll', item.url); return { src: d.relativo, tipo: 'imagem' }; }
1107
+ }
1108
+ } catch { /* sem apoio */ }
1109
+ return null;
1110
+ }
1111
+
1112
+ /* Os ícones automáticos trocam de coleção a cada vídeo (Joel, 05/10: "várias
1113
+ opções de ícones... que não sejam padrão da IA"). O ícone que o roteiro
1114
+ pediu pelo nome fica; o que não existe na coleção sorteada fica no 3D. */
1115
+ async function variarIcones(plano, roteiro) {
1116
+ const colecao = variedade.colecaoIcones();
1117
+ const explicitos = [];
1118
+ try { JSON.stringify(roteiro || {}, (k, v) => { if (k === 'icone' && typeof v === 'string') explicitos.push(v); return v; }); } catch { /* sem */ }
1119
+ const troca = {};
1120
+ /* VÁRIAS BIBLIOTECAS NO MESMO VÍDEO (13/10: "não uma biblioteca de ícone,
1121
+ mas várias, que vai misturar tudo"). Antes o vídeo sorteava UMA coleção
1122
+ e trocava todos os ícones para ela. Agora cada ícone tenta uma coleção,
1123
+ em rodízio a partir da sorteada; sem o desenho nela, a próxima. */
1124
+ const colecoes = [colecao, ...assets.COLECOES.map((c) => c[0]).filter((c) => c !== colecao)];
1125
+ let vez = 0;
1126
+ for (const nome of variedade.iconesTrocaveis(plano, explicitos)) {
1127
+ /* Primeiro O ÍCONE: o conceito escolhe entre as formas dele
1128
+ (edicao.ALTERNATIVAS) pelos pontos da variedade — o que os últimos
1129
+ vídeos menos usaram. Depois A COLEÇÃO. */
1130
+ const base = nome.split(':')[1];
1131
+ let escolhido = base;
1132
+ const alts = edicao.ALTERNATIVAS[base];
1133
+ if (alts) {
1134
+ const ordem = variedade.ordenar([base, ...alts].map((url) => ({ url })), 'icone-nome').map((x) => x.url);
1135
+ for (const n of ordem) {
1136
+ if (n === base) { escolhido = base; break; }
1137
+ try { const r = await assets.icone('fluent-3d:' + n); if (r && r.ok) { escolhido = n; break; } } catch { /* tenta o próximo */ }
1138
+ }
1139
+ variedade.marcar('icone-nome', escolhido);
1140
+ }
1141
+ let novo = 'fluent-3d:' + escolhido;
1142
+ for (let k = 0; k < colecoes.length; k++) {
1143
+ const c = colecoes[(vez + k) % colecoes.length];
1144
+ if (c === 'fluent-3d') break;
1145
+ try { const r = await assets.icone(c + ':' + escolhido); if (r && r.ok) { novo = c + ':' + escolhido; break; } } catch { /* a próxima */ }
1146
+ }
1147
+ vez++;
1148
+ if (novo !== nome) troca[nome] = novo;
1149
+ }
1150
+ const n = variedade.trocarIcones(plano, troca);
1151
+ if (n || colecao === 'fluent-3d') variedade.marcar('icones', colecao);
1152
+ return { colecao, trocados: n };
1153
+ }
1154
+
1155
+ /* ── A VOZ DO GEMINI ─────────────────────────────────────────────────────
1156
+ * O roteiro inteiro numa chamada só (o plano grátis tem poucos pedidos por
1157
+ * minuto), e as partes achadas depois na transcrição do próprio áudio: a
1158
+ * primeira palavra de cada parte, procurada em ordem. Sem achar, o tempo é
1159
+ * repartido pelo tamanho do texto de cada parte. */
1160
+ const VOZ_GEMINI = { thalita: 'Kore', francisca: 'Aoede', antonio: 'Charon', feminina: 'Kore', masculina: 'Charon' };
1161
+ const tokens = (t) => String(t || '').normalize('NFD').replace(/[̀-ͯ]/g, '').toLowerCase().split(/[^a-z0-9]+/).filter(Boolean);
1162
+
1163
+ function alinharPartes(lista, palavras, total) {
1164
+ const ws = palavras.map((w) => ({ ...w, k: tokens(w.texto)[0] || '' }));
1165
+ const chars = lista.map((x) => x.texto.length);
1166
+ const soma = chars.reduce((a, b) => a + b, 0) || 1;
1167
+ const inicios = [0];
1168
+ let cursor = 0, acum = 0;
1169
+ for (let i = 1; i < lista.length; i++) {
1170
+ acum += chars[i - 1];
1171
+ const esperado = Math.round(ws.length * acum / soma);
1172
+ /* As DUAS primeiras palavras da parte, seguidas: achar só pela primeira
1173
+ palavra longa deixava o "E" de "E sair com algo" no fim da fala
1174
+ anterior, e ele soava duas vezes (medido em 25/09, aos 38 s). */
1175
+ const tk = tokens(lista[i].texto);
1176
+ let achado = -1;
1177
+ for (let j = Math.max(cursor + 1, esperado - 14); j < Math.min(ws.length, esperado + 14); j++) {
1178
+ if (ws[j].k === tk[0] && (!tk[1] || (ws[j + 1] && ws[j + 1].k === tk[1]))) { achado = j; break; }
1179
+ }
1180
+ if (achado < 0) {
1181
+ const alvo = tk.find((w) => w.length >= 3) || tk[0];
1182
+ for (let j = Math.max(cursor + 1, esperado - 12); j < Math.min(ws.length, esperado + 12); j++) {
1183
+ if (ws[j].k === alvo) { achado = j; break; }
1184
+ }
1185
+ // A palavra curta que vem antes da achada ("e", "a", "o") é desta parte, não da anterior.
1186
+ while (achado > cursor + 1 && ws[achado - 1].k.length <= 2 && tk.slice(0, 3).includes(ws[achado - 1].k)) achado--;
1187
+ }
1188
+ const idx = achado > cursor ? achado : Math.max(cursor + 1, Math.min(ws.length - 1, esperado));
1189
+ inicios.push(idx);
1190
+ cursor = idx;
1191
+ }
1192
+ return lista.map((_, i) => {
1193
+ const a = ws[inicios[i]], b = ws[(inicios[i + 1] || ws.length) - 1];
1194
+ // As palavras da parte vão junto: o estilo impacto corta no tempo delas.
1195
+ const palavras = ws.slice(inicios[i], inicios[i + 1] || ws.length).map(({ de, ate, texto }) => ({ de, ate, texto }));
1196
+ return { de: i === 0 ? 0 : (a ? a.de : 0), ate: b ? b.ate : total, palavras };
1197
+ });
1198
+ }
1199
+
1200
+ /**
1201
+ * Onde o roteiro COMEÇA na fala transcrita, em segundos — 0 se começa logo.
1202
+ *
1203
+ * Dois jeitos de o Gemini vazar a direção, os dois vistos no vídeo do Joel
1204
+ * (10/10): falar "Rápido e contínuo." ANTES do roteiro, e falar NO LUGAR da
1205
+ * primeira frase ("Rápido e contínuo. Você pergunta…", sem o "IA é pra tirar
1206
+ * dúvida"). Então: acha o primeiro par de palavras seguidas que existe no
1207
+ * roteiro (não só o par do começo), e corta o que veio antes — mas só se o que
1208
+ * veio antes for, na maior parte, palavra da DIREÇÃO. Fala do roteiro que o
1209
+ * transcritor errou não é vazamento e não sai.
1210
+ */
1211
+ function vazamentoNoComeco(lista, palavras, direcao = '') {
1212
+ const norm = (t) => String(t || '').toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '').replace(/[^a-z0-9]+/g, ' ').trim();
1213
+ const roteiro = norm(lista.slice(0, 2).map((x) => x.texto).join(' ')).split(' ').filter(Boolean);
1214
+ if (roteiro.length < 2 || !palavras.length) return 0;
1215
+ const pares = new Set(roteiro.slice(0, -1).map((w, i) => w + ' ' + roteiro[i + 1]));
1216
+ /* 40 palavras, não 14 (13/10): a direção do personagem tem ~20 palavras, e
1217
+ o roteiro só começava depois da janela — o corte desistia e o vídeo saía
1218
+ com "Natural and close. Never like an announcer." na legenda. */
1219
+ const ditas = palavras.slice(0, 40).map((w) => norm(w.texto));
1220
+ let i = 0;
1221
+ while (i < ditas.length - 1 && !pares.has(ditas[i] + ' ' + ditas[i + 1])) i++;
1222
+ if (i === 0 || i >= ditas.length - 1) return 0;
1223
+ const daDirecao = new Set(norm(direcao).split(' ').filter(Boolean));
1224
+ const antes = ditas.slice(0, i).join(' ').split(' ').filter(Boolean);
1225
+ /* A transcrição entorta a direção ("Read aloud in Brazilian Portuguese" vira
1226
+ "Lê a alta em Brasília e Português"): basta 35% das palavras, ou 3, serem dela. */
1227
+ const daDir = antes.filter((w) => daDirecao.has(w)).length;
1228
+ const vazou = !direcao || daDir / antes.length >= 0.35 || daDir >= 3;
1229
+ return vazou ? Math.max(0, palavras[i].de - 0.08) : 0;
1230
+ }
1231
+
1232
+ async function narrarComGemini(lista, mp3, { voz, direcao } = {}) {
1233
+ /* A narração premium é do Pro em diante (lib/config/limites.js). Sem ela a corrente
1234
+ segue para a voz local (Kokoro/Edge) e o aviso explica o porquê. */
1235
+ const lim = require('../../config/limites.js');
1236
+ const prem = await lim.exigir('narracaoPremium');
1237
+ if (!prem.ok) { lim.avisar(prem.error + ' A narração saiu com a voz local.'); return { ok: false, error: prem.error }; }
1238
+ try {
1239
+ const cfg = require('../../config/config').loadConfig();
1240
+ const api = require('../../provider/api');
1241
+ /* A cota grátis da voz é por MINUTO e pequena: "quota" é esperar e
1242
+ tentar de novo, não desistir para a voz de reserva (medido em 25/09:
1243
+ a mesma chamada passava meio minuto depois). */
1244
+ let r = null;
1245
+ for (let tentativa = 0; tentativa < 4; tentativa++) {
1246
+ try {
1247
+ r = await api.request(cfg.server, '/api/voz', {
1248
+ texto: lista.map((x) => x.texto).join('\n\n'),
1249
+ voz: VOZ_GEMINI[String(voz || '').toLowerCase()] || voz || 'Charon',
1250
+ ...(direcao ? { direcao } : {}),
1251
+ }, cfg.token);
1252
+ } catch (e) { r = { ok: false, erro: e.message }; }
1253
+ if (r && r.ok) break;
1254
+ if (!/quota|rate|429|exhaust/i.test(String(r && r.erro))) break;
1255
+ await new Promise((ok) => setTimeout(ok, 30000));
1256
+ }
1257
+ if (!r || !r.ok) return { ok: false, error: (r && r.erro) || 'sem voz no servidor' };
1258
+ const pcm = mp3.replace(/\.mp3$/, '.pcm');
1259
+ fs.writeFileSync(pcm, Buffer.from(r.audio, 'base64'));
1260
+ const taxa = (String(r.formato).match(/rate=(\d+)/) || [])[1] || '24000';
1261
+ const c = await video.rodar(video.ffmpeg(), ['-y', '-f', 's16le', '-ar', taxa, '-ac', '1', '-i', pcm,
1262
+ '-af', 'loudnorm=I=-14:TP=-1.5:LRA=9', '-c:a', 'libmp3lame', '-q:a', '3', mp3], { timeout: 120000 });
1263
+ try { fs.unlinkSync(pcm); } catch { /* fica */ }
1264
+ if (!c.ok) return { ok: false, error: 'não consegui converter a voz' };
1265
+ const med = await video.medir(mp3);
1266
+ /* A voz CORTADA: o Gemini às vezes devolve metade do roteiro, sem erro
1267
+ (medido em 25/09: 27,5 s de áudio para um texto de ~55 s). Fala
1268
+ normal passa de 11 caracteres por segundo; menos que isso é corte. */
1269
+ const chars = lista.reduce((n, x) => n + x.texto.length, 0);
1270
+ if (med.segundos < chars / 22) return { ok: false, error: `a voz veio cortada (${med.segundos.toFixed(1)} s para ${chars} caracteres)` };
1271
+ const tr = await api.requestTranscricao(cfg.server, { token: cfg.token, audio: fs.readFileSync(mp3).toString('base64'), nome: 'voz.mp3', idioma: 'pt' });
1272
+ let palavras = (tr && tr.palavras) || [];
1273
+ if (!palavras.length) return { ok: false, error: 'sem a transcrição da voz para achar as partes' };
1274
+ let segundos = med.segundos;
1275
+ /* A DIREÇÃO LIDA EM VOZ ALTA. O servidor manda a direção ("leia RÁPIDO e
1276
+ contínuo…") e o texto no mesmo pedido, e o Gemini às vezes fala o
1277
+ começo dela: o vídeo do Joel abria com "Rápido e contínuo." antes do
1278
+ roteiro (10/10). Se o roteiro só começa depois de algumas palavras,
1279
+ o que vem antes é vazamento — e sai do áudio. */
1280
+ const corte = vazamentoNoComeco(lista, palavras, direcao);
1281
+ if (corte > 0.15) {
1282
+ const cortado = mp3.replace(/\.mp3$/, '-c.mp3');
1283
+ const k = await video.rodar(video.ffmpeg(), ['-y', '-ss', corte.toFixed(3), '-i', mp3, '-c:a', 'libmp3lame', '-q:a', '3', cortado], { timeout: 120000 });
1284
+ if (k.ok && fs.existsSync(cortado)) {
1285
+ fs.renameSync(cortado, mp3);
1286
+ palavras = palavras.filter((w) => w.de >= corte - 0.02).map((w) => ({ ...w, de: Math.max(0, w.de - corte), ate: Math.max(0, w.ate - corte) }));
1287
+ segundos = Math.max(0, segundos - corte);
1288
+ }
1289
+ }
1290
+ return { ok: true, voz: `gemini ${r.voz}`, segundos, partes: alinharPartes(lista, palavras, segundos), ...(corte > 0.15 ? { cortouDirecao: corte } : {}) };
1291
+ } catch (e) {
1292
+ return { ok: false, error: e.message };
1293
+ }
1294
+ }
1295
+
1296
+ /* A VOZ DO VOICESTUDIO (15/10): o app local fala o roteiro inteiro, e o resto
1297
+ é o caminho do Gemini — volume de Reels, a transcrição para achar as partes.
1298
+ Fechado ou falhando, devolve ok:false e a cadeia segue para o Gemini. */
1299
+ async function narrarComVoiceStudio(lista, mp3, { voz } = {}) {
1300
+ if (process.env.PRIMOCODE_SEM_VOICESTUDIO) return { ok: false, indisponivel: true, error: 'voicestudio desligado' };
1301
+ try {
1302
+ const texto = lista.map((x) => x.texto).join('\n\n');
1303
+ // A voz do Gemini ("Kore", "Charon") não existe lá: só um perfil do próprio app.
1304
+ const perfil = /^vs:/i.test(String(voz || '')) ? String(voz).slice(3) : undefined;
1305
+ const r = await voicestudio.falar(texto, { voz: perfil });
1306
+ if (!r.ok) return r;
1307
+ const bruto = mp3.replace(/\.mp3$/, '-vs.mp3');
1308
+ fs.writeFileSync(bruto, r.audio);
1309
+ const c = await video.rodar(video.ffmpeg(), ['-y', '-i', bruto, '-af', 'loudnorm=I=-14:TP=-1.5:LRA=9', '-c:a', 'libmp3lame', '-q:a', '3', mp3], { timeout: 120000 });
1310
+ try { fs.unlinkSync(bruto); } catch { /* fica */ }
1311
+ if (!c.ok) return { ok: false, error: 'voicestudio: não consegui converter a voz' };
1312
+ const med = await video.medir(mp3);
1313
+ const chars = lista.reduce((n, x) => n + x.texto.length, 0);
1314
+ if (med.segundos < chars / 22) return { ok: false, error: `voicestudio: a voz veio cortada (${med.segundos.toFixed(1)} s para ${chars} caracteres)` };
1315
+ const cfg = require('../../config/config').loadConfig();
1316
+ const tr = await require('../../provider/api').requestTranscricao(cfg.server, { token: cfg.token, audio: fs.readFileSync(mp3).toString('base64'), nome: 'voz.mp3', idioma: 'pt' });
1317
+ const palavras = (tr && tr.palavras) || [];
1318
+ if (!palavras.length) return { ok: false, error: 'voicestudio: sem a transcrição da voz para achar as partes' };
1319
+ return { ok: true, voz: `voicestudio ${perfil || 'default'}`, segundos: med.segundos, partes: alinharPartes(lista, palavras, med.segundos) };
1320
+ } catch (e) {
1321
+ return { ok: false, error: 'voicestudio: ' + e.message };
1322
+ }
1323
+ }
1324
+
1325
+ /* Onde estão os rostos em cada foto (studio/rostos.py, pelo uv). Guardado no
1326
+ projeto: a mesma foto não é analisada duas vezes. */
1327
+ async function acharRostos(p, srcs) {
1328
+ const guardado = (p.acervo && p.acervo.rostos) || {};
1329
+ const falta = srcs.filter((s0) => !(s0 in guardado));
1330
+ if (falta.length) {
1331
+ const uv = acharUv();
1332
+ const r = await new Promise((resolve) => {
1333
+ const args = ['run', '--quiet', '--python', '3.12', '--with', 'mediapipe<0.10.22', '--with', 'opencv-python', '--with', 'numpy', 'python', path.join(PY, 'rostos.py'), ...falta.map((x) => path.join(p.pasta, x))];
1334
+ const pr = uv ? spawn(uv, args) : spawn(python() || 'python3', [path.join(PY, 'rostos.py'), ...falta.map((x) => path.join(p.pasta, x))]);
1335
+ let out = '';
1336
+ pr.stdout.on('data', (d) => { out += d; });
1337
+ pr.on('close', () => { try { resolve(JSON.parse(out.trim().split('\n').pop())); } catch { resolve({ ok: false }); } });
1338
+ pr.on('error', () => resolve({ ok: false }));
1339
+ });
1340
+ if (r && r.ok) {
1341
+ for (const [cheio, info] of Object.entries(r.fotos || {})) guardado[path.relative(p.pasta, cheio).replace(/\\/g, '/')] = info;
1342
+ for (const x of falta) if (!(x in guardado)) guardado[x] = null;
1343
+ projeto.salvar(p.id, { acervo: { ...(projeto.ler(p.id).acervo || {}), rostos: guardado } });
1344
+ }
1345
+ }
1346
+ return guardado;
1347
+ }
1348
+
1349
+ /* O DEPOIMENTO cortado na PALAVRA, não no trecho: começa na primeira palavra
1350
+ da frase e termina logo depois da última, com fade, a voz normalizada e um
1351
+ respiro no fim. "Fica sempre um 'é', um 'e' das pessoas… a música muito
1352
+ alta e não dá pra ouvir as pessoas" (25/09). */
1353
+ async function prepararDepoimento(p, c) {
1354
+ const origem = path.join(p.pasta, c.src);
1355
+ if (!fs.existsSync(origem) || c.pronto) return {};
1356
+ let de = c.de, ate = c.ate;
1357
+ try {
1358
+ const cfg = require('../../config/config').loadConfig();
1359
+ const amostra = path.join(p.pasta, 'midia', `depo-amostra-${Date.now().toString(36)}.mp3`);
1360
+ await video.rodar(video.ffmpeg(), ['-y', '-ss', String(Math.max(0, c.de - 1.5)), '-t', String(c.ate - c.de + 3), '-i', origem, '-ac', '1', '-ar', '16000', '-b:a', '32k', amostra], { timeout: 60000 });
1361
+ const tr = await require('../../provider/api').requestTranscricao(cfg.server, { token: cfg.token, audio: fs.readFileSync(amostra).toString('base64'), nome: 'd.mp3', idioma: 'pt' });
1362
+ try { fs.unlinkSync(amostra); } catch { /* fica */ }
1363
+ const base0 = Math.max(0, c.de - 1.5);
1364
+ const ws = ((tr && tr.palavras) || []).map((w) => ({ ...w, de: w.de + base0, ate: w.ate + base0 }));
1365
+ /* Só a FRASE de efeito: começa na primeira palavra dela e termina na
1366
+ última. "Fala a frase que tem que falar e continua antes de trocar"
1367
+ (25/09): o resto da conversa não tem nada a ver com o vídeo. */
1368
+ const alvo = tokens(c.frase || '');
1369
+ const k0 = (w) => tokens(w.texto)[0] || '';
1370
+ const iniW = ws.find((w) => w.de >= c.de - 1.2 && alvo.length && k0(w) === alvo[0])
1371
+ || ws.find((w) => w.de >= c.de - 0.6 && alvo.includes(k0(w)));
1372
+ const ultimo = alvo[alvo.length - 1];
1373
+ const fimW = [...ws].reverse().find((w) => w.ate <= c.ate + 1.5 && (!iniW || w.de > iniW.de) && k0(w) === ultimo);
1374
+ if (iniW) de = Math.max(0, iniW.de - 0.08);
1375
+ if (fimW) ate = fimW.ate;
1376
+ else { const fimWs = ws.filter((w) => w.ate <= c.ate + 0.3); if (fimWs.length) ate = fimWs[fimWs.length - 1].ate; }
1377
+ // A frase na tela é o que a pessoa FALA no trecho — palavra por palavra.
1378
+ const ditas = ws.filter((w) => w.de >= de - 0.05 && w.ate <= ate + 0.05).map((w) => w.texto).join(' ').trim();
1379
+ /* Se a frase do roteiro bate com o que foi dito (a transcrição erra
1380
+ detalhe: "eu conseguir" no lugar de "eu consegui"), fica a do roteiro. */
1381
+ const tA = tokens(c.frase || ''), tD = tokens(ditas);
1382
+ const bate = tA.length && tA.filter((w) => tD.includes(w)).length / tA.length >= 0.7;
1383
+ if (!bate && ditas.split(/\s+/).length >= 3) c.fraseDita = ditas.replace(/^./, (x) => x.toUpperCase()).replace(/[,;]$/, '.');
1384
+ } catch { /* fica o trecho pedido */ }
1385
+ const dur = ate - de + 0.45; // um respiro curto depois da última palavra
1386
+ const saida = path.join(p.pasta, 'midia', `depo-${path.basename(c.src, path.extname(c.src))}-${Math.round(de)}.mp4`);
1387
+ const r = await video.rodar(video.ffmpeg(), ['-y', '-ss', String(de), '-t', String(dur), '-i', origem,
1388
+ '-af', `loudnorm=I=-14:TP=-1.5:LRA=9,afade=t=in:d=0.1,afade=t=out:st=${Math.max(0, dur - 0.4).toFixed(2)}:d=0.4`,
1389
+ '-c:v', 'libx264', '-preset', 'veryfast', '-crf', '18', '-c:a', 'aac', '-b:a', '192k', saida], { timeout: 5 * 60000 });
1390
+ if (!r.ok) return {};
1391
+ return { src: path.relative(p.pasta, saida).replace(/\\/g, '/'), de: 0, ate: Math.round((dur - 0.3) * 100) / 100, pronto: true,
1392
+ origem: { src: c.src, de: c.de, ate: c.ate, frase: c.frase }, ...(c.fraseDita ? { frase: c.fraseDita } : {}) };
1393
+ }
1394
+
1395
+ /* O tom de cada estilo, em UMA frase de instrução, em inglês e terminando em
1396
+ dois-pontos, que é a forma que o Gemini TTS entende como instrução e não
1397
+ como fala. Se ainda vazar, o corte de vazamentoNoComeco tira (as palavras
1398
+ ditas antes do roteiro são quase todas daqui). */
1399
+ const DIRECAO_DA_VOZ = {
1400
+ gerativo: 'Read aloud in Brazilian Portuguese as a tech reels narrator: full, warm voice close to the mic, energetic and smiling, no long pauses:',
1401
+ fluido: 'Read aloud in Brazilian Portuguese as a premium product video narrator: confident and close, clean sentences that flow into each other, no ad tone:',
1402
+ personagem: 'Read aloud in Brazilian Portuguese as someone really talking on a podcast: natural and close, never like an announcer:',
1403
+ impacto: 'Read aloud in Brazilian Portuguese as an energetic ad announcer: full voice, strong emphasis on the impact words:',
1404
+ padrao: 'Read aloud in Brazilian Portuguese as a lively tech reels narrator: confident, smiling, emphasis on the words that matter:',
1405
+ };
1406
+
1407
+ /* A narração com cache (a mesma fala, na mesma direção, não é gerada duas vezes). */
1408
+ async function narrarComCache(lista, mp3, { voz, direcao } = {}) {
1409
+ /* 'v3' (11/10): as narrações guardadas com a direção antiga (a que tinha
1410
+ "RÁPIDO" e "contínuas") ficam para trás — reaproveitar uma delas trazia o
1411
+ "Rápido e contínuo." de volta mesmo com a direção nova. */
1412
+ const chave = require('crypto').createHash('sha1').update(JSON.stringify(['v4', lista.map((x) => x.texto), voz || '', direcao || ''])).digest('hex').slice(0, 16);
1413
+ const dir = path.join(os.homedir(), '.primocode', 'studio', 'cache-voz');
1414
+ const cm = path.join(dir, chave + '.mp3'), cj = path.join(dir, chave + '.json');
1415
+ if (fs.existsSync(cm) && fs.existsSync(cj)) { fs.copyFileSync(cm, mp3); return { ok: true, ...JSON.parse(fs.readFileSync(cj, 'utf8')) }; }
1416
+ // A voz local pedida (voz: 'kokoro'): direto nela, sem gastar a cota do Gemini.
1417
+ if (kokoro.querKokoro(voz)) return kokoro.narrar(lista, mp3, { voz, uv: acharUv() });
1418
+ // O VoiceStudio local primeiro (15/10); fechado ou falhando, o Gemini.
1419
+ let v = await narrarComVoiceStudio(lista, mp3, { voz });
1420
+ if (!v.ok) v = await narrarComGemini(lista, mp3, { voz, direcao });
1421
+ if (v.ok) { try { fs.mkdirSync(dir, { recursive: true }); fs.copyFileSync(mp3, cm); fs.writeFileSync(cj, JSON.stringify({ voz: v.voz, segundos: v.segundos, partes: v.partes })); } catch { /* sem cache */ } }
1422
+ return v;
1423
+ }
1424
+
1425
+ /* A PRODUÇÃO (producao.js): cada necessidade — voz, trilha, efeitos — pela
1426
+ corrente de provedores dela, com o cache do projeto. `roteiro.provedores`
1427
+ ({ voz: 'kokoro' }) passa um provedor para a frente, e o caderno guarda
1428
+ quem produziu cada coisa. */
1429
+ async function produzirNecessidade(p, roteiro, pedido, provedores) {
1430
+ const r = await producao.produzirUma(pedido, provedores, { escolha: ((roteiro && roteiro.provedores) || {})[pedido.tipo], cache: producao.cacheDe(p.pasta) });
1431
+ projeto.anotar(p.id, 'producao', producao.linhaCaderno(r), { necessidade: pedido.tipo, provedor: r.quem || null, cache: !!r.doCache });
1432
+ return r;
1433
+ }
1434
+
1435
+ /* A voz como provedores, na ordem do kokoro.ordem: o Gemini (com o cache e a
1436
+ direção dele), o Kokoro local e o Edge. A falha de uma passa para a próxima. */
1437
+ function provedoresDeVoz(lista, mp3, arq, voz, vozEdge, { soEdge = false, gemini, escolha } = {}) {
1438
+ const todos = {
1439
+ voicestudio: () => narrarComVoiceStudio(lista, mp3, { voz }),
1440
+ gemini: () => gemini(),
1441
+ kokoro: () => kokoro.narrar(lista, mp3, { voz, uv: acharUv() }),
1442
+ edge: () => {
1443
+ // Ritmo NORMAL: o "citação" (-10%, respiro longo) esticou o vídeo para 125 s.
1444
+ if (!fs.existsSync(arq)) fs.writeFileSync(arq, JSON.stringify(lista.map((x) => ({ ...x, registro: 'normal' }))));
1445
+ return narrarReserva(lista, mp3, arq, voz, vozEdge, { soEdge: true });
1446
+ },
1447
+ };
1448
+ const comResultado = (f) => async () => { const v = await f(); return v && v.ok ? { ...v, arquivo: mp3 } : v; };
1449
+ const ordem = kokoro.ordem(voz, process.env, { soEdge });
1450
+ // A escolhida no roteiro entra mesmo fora da ordem (o produzirUma a põe na frente).
1451
+ if (escolha && todos[escolha] && !ordem.includes(escolha)) ordem.push(escolha);
1452
+ return ordem.map((nome) => ({ nome, gerar: comResultado(todos[nome]) }));
1453
+ }
1454
+
1455
+ /* A VOZ DE RESERVA, quando o Gemini falha: o Kokoro (local, sem cota) e
1456
+ depois o Edge. A falha de uma passa para a próxima, nunca derruba. */
1457
+ function narrarReserva(lista, mp3, arq, voz, vozEdge, { soEdge = false, semKokoro = false } = {}) {
1458
+ const passos = kokoro.ordem(voz, process.env, { soEdge }).filter((n) => n !== 'gemini' && n !== 'voicestudio' && !(semKokoro && n === 'kokoro'));
1459
+ return kokoro.corrente(passos, {
1460
+ kokoro: () => kokoro.narrar(lista, mp3, { voz, uv: acharUv() }),
1461
+ edge: () => rodarPython('narrar.py', ['roteiro', '--arquivo', arq, '--saida', mp3, '--voz', kokoro.vozNoEdge(voz, vozEdge)], { timeout: 10 * 60000 }),
1462
+ });
1463
+ }
1464
+
1465
+ /* DUAS VOZES (falantes.js): os mp3 de cada falante, um depois do outro, num
1466
+ arquivo só — reamostrados, porque o Gemini sai a 24 kHz e o Edge não. A
1467
+ duração de cada um é MEDIDA: é ela que empurra os tempos do grupo seguinte. */
1468
+ async function juntarVozes(arquivos, mp3) {
1469
+ const fil = arquivos.map((_, i) => `[${i}:a]aresample=44100,aformat=channel_layouts=mono[a${i}]`).join(';')
1470
+ + ';' + arquivos.map((_, i) => `[a${i}]`).join('') + `concat=n=${arquivos.length}:v=0:a=1[s]`;
1471
+ const c = await video.rodar(video.ffmpeg(), ['-y', ...arquivos.flatMap((a) => ['-i', a]), '-filter_complex', fil, '-map', '[s]',
1472
+ '-c:a', 'libmp3lame', '-q:a', '3', mp3], { timeout: 120000 });
1473
+ if (!c.ok) return { ok: false, error: 'não consegui juntar as vozes' };
1474
+ const duracoes = [];
1475
+ for (const a of arquivos) duracoes.push((await video.medir(a)).segundos);
1476
+ return { ok: true, duracoes };
1477
+ }
1478
+
1479
+ /* A MÚSICA TEM LETRA? O acervo não diz se a faixa é instrumental, então ela
1480
+ é ouvida: 25 s do meio vão para a transcrição, e mais de 6 palavras é voz
1481
+ cantada. Sem servidor para ouvir, a faixa passa (melhor música que nenhuma). */
1482
+ async function temLetra(arquivo) {
1483
+ try {
1484
+ const m = await video.medir(arquivo);
1485
+ const ini = Math.max(0, (m.segundos || 60) * 0.35);
1486
+ const amostra = arquivo.replace(/\.[a-z0-9]+$/i, '') + '.amostra.mp3';
1487
+ const c = await video.rodar(video.ffmpeg(), ['-y', '-ss', String(ini), '-t', '25', '-i', arquivo, '-ac', '1', '-ar', '16000', '-b:a', '32k', amostra], { timeout: 60000 });
1488
+ if (!c.ok) return false;
1489
+ const cfg = require('../../config/config').loadConfig();
1490
+ const r = await require('../../provider/api').requestTranscricao(cfg.server, { token: cfg.token, audio: fs.readFileSync(amostra).toString('base64'), nome: 'musica.mp3', idioma: 'en' });
1491
+ try { fs.unlinkSync(amostra); } catch { /* fica */ }
1492
+ const palavras = (r && r.palavras ? r.palavras.length : String((r && r.texto) || '').split(/\s+/).filter(Boolean).length);
1493
+ return palavras > 6;
1494
+ } catch { return false; }
1495
+ }
1496
+
1497
+ /* OS SONS DE VERDADE: gravação real de acervo aberto (teclado, whoosh
1498
+ cinematográfico, impacto grave, som de sala), e o sintetizado só quando a
1499
+ busca falha. "Esses efeitos sonoros estão genéricos e sem impacto."
1500
+ (25/09/2026) */
1501
+ async function sonsReais(p, video) {
1502
+ const sint = await edicao.prepararSons(p.pasta, video);
1503
+ /* Termo sorteado e resultado sorteado, sem repetir os últimos: o primeiro
1504
+ resultado do termo fixo era o mesmo whoosh em todo vídeo (02/10). */
1505
+ const sons = { ...sint };
1506
+ for (const nome of ['teclado', 'whoosh', 'impacto', 'sala']) {
1507
+ for (const termo of variedade.termosSfx(nome)) {
1508
+ if (sons[nome] !== sint[nome]) break;
1509
+ try {
1510
+ const b = await assets.procurarSom(termo, { quantas: 10, livre: true });
1511
+ for (const item of variedade.ordenar(b.ok ? b.sons : [], 'sfx').slice(0, 3)) {
1512
+ const d = await assets.baixar(item, { pasta: p.pasta, nome: 'sfx-real-' + nome });
1513
+ if (d.ok) { sons[nome] = d.relativo; variedade.marcar('sfx', item.url); break; }
1514
+ }
1515
+ } catch { /* o próximo termo */ }
1516
+ }
1517
+ }
1518
+ return sons;
1519
+ }
1520
+
1521
+ const PROPORCOES = { '16:9': [1920, 1080], '9:16': [1080, 1920], '1:1': [1080, 1080], '4:5': [1080, 1350] };
1522
+ /* A proporção que o PEDIDO disse (14/10: "vertical 9:16" saiu deitado, porque
1523
+ só valia a proporção que o modelo passasse). A do modelo ainda manda. */
1524
+ function proporcaoDoPedido(pedido) {
1525
+ const t = String(pedido || '');
1526
+ if (/\b9\s*[:x×]\s*16\b|\bvertical\b|\breels?\b|\bstor(y|ies)\b|\btik\s?tok\b|\bshorts\b/i.test(t)) return '9:16';
1527
+ if (/\b4\s*[:x×]\s*5\b/.test(t)) return '4:5';
1528
+ if (/\b1\s*[:x×]\s*1\b|\bquadrad[oa]\b/i.test(t)) return '1:1';
1529
+ return null;
1530
+ }
1531
+
1532
+ /** O roteiro vira plano: baixa o que falta, narra, e chama o compositor. */
1533
+ /* A ASSINATURA (assinatura.js): o vídeo é medido e conferido contra as
1534
+ faixas do estilo; o que saiu volta para o agente e fica no caderno. */
1535
+ function conferirAssinatura(p, r, nome) {
1536
+ const fora = assinatura.descrever(assinatura.conferir(nome, assinatura.medir(r.partitura, r.plano)).fora);
1537
+ r.resumo.assinatura = { nome, seguiu: !fora.length, fora: fora.length ? fora : undefined };
1538
+ projeto.anotar(p.id, 'assinatura', fora.length ? `fora da assinatura ${nome}: ${fora.join('; ')}` : `seguiu a assinatura ${nome}`);
1539
+ }
1540
+
1541
+ /* A REFERÊNCIA VISUAL que a pessoa manda (13/10: "não usa as referências
1542
+ que mandei" — era o print da landing, arrastado no pedido). O agente não
1543
+ enxerga imagem; aqui ela entra no projeto, as cores saem pelo ffmpeg e, se o
1544
+ projeto ainda não tem marca, viram a marca. Com site, o site manda. */
1545
+ function importarReferencia(p, arquivo) {
1546
+ const orig = String(arquivo || '').trim().replace(/^file:\/\//, '');
1547
+ if (!orig || !fs.existsSync(orig)) return { ok: false, error: 'mande em "arquivo" o caminho da imagem de referência.' };
1548
+ const nome = path.basename(orig).normalize('NFD').replace(/[\u0300-\u036f]/g, '').replace(/[^\w.-]+/g, '-');
1549
+ const destino = path.join(p.pasta, 'midia', 'referencias', nome);
1550
+ fs.mkdirSync(path.dirname(destino), { recursive: true });
1551
+ fs.copyFileSync(orig, destino);
1552
+ const rel = path.relative(p.pasta, destino).replace(/\\/g, '/');
1553
+ const cores = marcaLib.coresDaImagem(destino);
1554
+ const temMarca = !!(p.marca && Object.keys(marcaLib.marcaEmObjeto(p.marca).cores || {}).length);
1555
+ const salvar = { referencias: [...(p.referencias || []).filter((x) => x.src !== rel), { src: rel, cores, de: orig }] };
1556
+ if (!temMarca && cores.length) salvar.marca = { ...(p.marca || {}), ...marcaLib.marcaEmObjeto({ cores }) };
1557
+ projeto.salvar(p.id, salvar);
1558
+ projeto.anotar(p.id, 'referencia', `imagem ${rel}: ${cores.join(' ') || 'sem cor'}${temMarca ? '' : ' (virou a marca)'}`);
1559
+ return {
1560
+ ok: true, src: rel, cores, viraMarca: !temMarca && cores.length > 0,
1561
+ comoUsar: (temMarca ? 'O projeto já tem a marca do site: ela manda nas cores; a referência guia o JEITO (composição, peso, o que aparece). '
1562
+ : 'Estas cores viraram a marca do projeto. ')
1563
+ + 'Se a imagem é print do site ou do produto, o vídeo mostra a tela de verdade (estudio_midia acao:"print" e a peça printsite).',
1564
+ };
1565
+ }
1566
+
1567
+ async function prepararRoteiro(p, args) {
1568
+ const roteiro = typeof args.roteiro === 'string' ? JSON.parse(args.roteiro) : args.roteiro;
1569
+ // O mesmo args (não uma cópia): o __semNarracao e o __cenasQuebradas voltam para quem chamou.
1570
+ if (Array.isArray(roteiro)) { args.roteiro = { partes: roteiro }; return prepararRoteiro(p, args); }
1571
+ /* O que o modelo manda e o disco não tem vira problema de render: um
1572
+ "src" que é endereço da internet vira busca, e um arquivo que não
1573
+ existe na pasta sai. A logo da marca vale só se estiver lá. */
1574
+ const existe = (rel) => rel && !/^https?:/i.test(rel) && fs.existsSync(path.resolve(p.pasta, rel));
1575
+ for (const pt of roteiro.partes || []) {
1576
+ if (pt.src && !existe(pt.src)) { if (!pt.busca && /^https?:/i.test(pt.src)) pt.busca = pt.titulo || ''; delete pt.src; }
1577
+ }
1578
+ /* A CENA QUE A IA ESCREVEU (parte.componente): ela escreve na pasta de
1579
+ trabalho, e o Remotion só lê o que está no projeto. O arquivo é copiado
1580
+ para componentes/ do projeto; se não existe, a parte fica no estilo da
1581
+ casa (e o caderno diz por quê), em vez de o render quebrar. */
1582
+ for (const pt of roteiro.partes || []) {
1583
+ if (!pt || typeof pt.componente !== 'string' || !pt.componente.trim()) continue;
1584
+ const pedido = pt.componente.trim();
1585
+ const achado = [path.resolve(p.pasta, pedido), args.__pasta && path.resolve(args.__pasta, pedido), path.isAbsolute(pedido) && pedido]
1586
+ .find((f) => f && fs.existsSync(f) && /\.(jsx|tsx|js)$/i.test(f));
1587
+ if (!achado) { projeto.anotar(p.id, 'plano', `componente ${pedido} não existe: a parte ficou no estilo da casa`); delete pt.componente; continue; }
1588
+ const dentro = path.resolve(p.pasta) + path.sep;
1589
+ if (!achado.startsWith(dentro)) {
1590
+ const destino = path.join(p.pasta, 'componentes', path.basename(achado));
1591
+ fs.mkdirSync(path.dirname(destino), { recursive: true });
1592
+ fs.copyFileSync(achado, destino);
1593
+ pt.componente = path.relative(p.pasta, destino).replace(/\\/g, '/');
1594
+ } else pt.componente = path.relative(p.pasta, achado).replace(/\\/g, '/');
1595
+ // A cena quebrada não derruba o vídeo: sai, a parte fica no gerativo, e o erro volta para a IA (cena.js).
1596
+ const conf = conferirCena(path.join(p.pasta, pt.componente));
1597
+ if (!conf.ok) {
1598
+ (args.__cenasQuebradas = args.__cenasQuebradas || []).push({ componente: pt.componente, erro: conf.erro });
1599
+ projeto.anotar(p.id, 'plano', `componente ${pt.componente} quebrado (${conf.erro}): a parte ficou no gerativo`);
1600
+ delete pt.componente;
1601
+ }
1602
+ }
1603
+ // As imagens do pedido (o terminal guardou em referencias.imagens) entram sozinhas, uma vez por projeto.
1604
+ const jaTem = new Set((p.referencias || []).map((x) => x.de));
1605
+ const novas = referencias.imagens().filter((f) => !jaTem.has(f));
1606
+ for (const f of novas) { try { importarReferencia(p, f); } catch (e) { projeto.anotar(p.id, 'referencia', `não importou ${path.basename(f)}: ${e.message}`); } }
1607
+ if (novas.length) p = projeto.ler(p.id) || p;
1608
+ /* O KIT DE MARCA ativo (lib/plugin/marca-kit.js) vale mais que a marca lida do
1609
+ site: a pessoa criou uma vez e quer em todo vídeo. O roteiro ainda ganha. */
1610
+ const kitM = marcaKit.preencher({}, { pastas: [p.pasta, process.cwd()] });
1611
+ if (kitM.kit) { p = { ...p, marca: kitM }; }
1612
+ if (roteiro.marca) {
1613
+ /* A do roteiro por cima da do site, CAMPO A CAMPO: antes o "cores" em
1614
+ lista do agente apagava o {fundo, destaque} lido do site (13/10). */
1615
+ const site = marcaLib.marcaEmObjeto(p.marca), dele = marcaLib.marcaEmObjeto(roteiro.marca);
1616
+ roteiro.marca = { ...site, ...dele, cores: { ...(site.cores || {}), ...(dele.cores || {}) }, fontes: { ...(site.fontes || {}), ...(dele.fontes || {}) } };
1617
+ if (roteiro.marca.logo && !existe(roteiro.marca.logo)) roteiro.marca.logo = (p.marca && existe(p.marca.logo)) ? p.marca.logo : undefined;
1618
+ } else if (p.marca) roteiro.marca = p.marca;
1619
+ const partes = roteiro.partes || [];
1620
+ /* O ESTILO (estilo.js). O padrão é MOTION (motion.js): um plano contínuo
1621
+ em 3D — "isso sim é motion" (Joel, 28/09). Explicação vira VOX
1622
+ (editorial, tinta sobre papel), marca vira MARCA (brand reveal),
1623
+ lançamento de produto vira LANCAMENTO, anúncio e reels vão para o
1624
+ IMPACTO. O que o agente pediu vale mais que tudo. */
1625
+ const pedidoTxt = `${p.pedido || ''} ${args.pedido || ''}`;
1626
+ const ref = referencias.atual();
1627
+ /* Sem imagem é o padrão (07/10): sem o pedido dizer, nada de foto nem
1628
+ vídeo de fora. Ninguém escolheu o estilo? Ele gira (estilo.js) — sem
1629
+ imagem, só entre os que não vivem de foto. O híbrido e o cinema, pedidos
1630
+ pelo nome sem imagem, caem para o gerativo (sem nada baixado). */
1631
+ const semImagem = referencias.semImagem(ref);
1632
+ let estilo = escolherEstilo({ pedido: pedidoTxt, agente: args.estilo, roteiro: roteiro.estilo, girar: true, semImagem });
1633
+ if (semImagem && (estilo === 'hibrido' || estilo === 'cinema')) estilo = 'gerativo';
1634
+ /* SEM NARRAÇÃO (14/10, "só o motion e os efeitos sonoros, os barulhinhos"):
1635
+ roteiro.semNarracao ou o pedido. O cinema e o híbrido vivem da voz: caem no gerativo. */
1636
+ const semVoz = semNarracao.ativo(roteiro, pedidoTxt);
1637
+ if (semVoz && (estilo === 'hibrido' || estilo === 'cinema')) estilo = 'gerativo';
1638
+ /* "O vídeo deve ter um 3D do fone" (30/09): pedido de 3D vira o gerativo
1639
+ com o produto modelado girando numa batida (kit/tres.jsx) — a menos que
1640
+ o agente tenha escolhido outro estilo pelo nome. */
1641
+ if (/\b3\s?d\b|tridimensional/i.test(pedidoTxt) && estilo !== 'personagem' && (!args.estilo || estilo === 'gerativo' || estilo === 'lancamento')) {
1642
+ // O 3D mora numa batida do gerativo; o lançamento antigo, só pelo nome.
1643
+ if (!args.estilo && estilo !== 'lancamento') estilo = 'gerativo';
1644
+ if (!roteiro.modelo3d) roteiro.modelo3d = variacao3d.modeloDoPedido(pedidoTxt);
1645
+ }
1646
+ // O bicho do vídeo 3D não fala com voz de gente (a menos que o pedido peça): sai da narração e fica na cena.
1647
+ if (estilo === 'personagem') {
1648
+ const calados = personagem.calarBichos(roteiro, pedidoTxt);
1649
+ if (calados.length) projeto.anotar(p.id, 'plano', `sem fala (bicho): ${calados.map((c) => `${c.nome} (${c.especie})`).join(', ')} — fica na cena; para falar, peça "${calados[0].especie} falante"`);
1650
+ }
1651
+ // O 3D de cada vídeo: acabamento, câmera, luz e ritmo sorteados sem repetir os últimos.
1652
+ /* Por PROJETO, não por chamada: mandar o roteiro de novo para ajustar uma
1653
+ frase não pode sortear outro 3D nem outro vídeo. Projeto novo, sorteio novo. */
1654
+ if (roteiro.modelo3d && !roteiro.variacao3d) {
1655
+ roteiro.variacao3d = p.variacao3d || variacao3d.escolherVariacao3d();
1656
+ if (!p.variacao3d) projeto.salvar(p.id, { variacao3d: roteiro.variacao3d });
1657
+ }
1658
+ /* A SEMENTE do gerativo saía do texto do roteiro: o mesmo roteiro dava o
1659
+ mesmo vídeo, batida por batida (05/10). Sem semente do roteiro, cada
1660
+ projeto sorteia a sua. */
1661
+ if (estilo === 'gerativo' && roteiro.semente == null) {
1662
+ roteiro.semente = p.semente != null ? p.semente : Math.floor(Math.random() * 1e9);
1663
+ if (p.semente == null) projeto.salvar(p.id, { semente: roteiro.semente });
1664
+ }
1665
+ /* O humor, a paleta, as fontes e o gênero do gerativo, com memória entre
1666
+ vídeos (09/10, "vício em cores, músicas, fontes"): por PROJETO, como a semente. */
1667
+ // O assunto do vídeo é o rótulo da moldura (quando ela sai): o título do projeto.
1668
+ if (estilo === 'gerativo' && !roteiro.titulo && p.titulo) roteiro.titulo = p.titulo;
1669
+ // O estilo que a IA montou (estilos.js) vence o sorteio e o que o projeto tinha guardado.
1670
+ if (estilo === 'gerativo' && roteiro.estiloVisual && !roteiro.escolhasGerativo) {
1671
+ const r = estilos.montar(roteiro.estiloVisual, roteiro);
1672
+ roteiro.escolhasGerativo = r.escolhas;
1673
+ projeto.salvar(p.id, { escolhasGerativo: r.escolhas });
1674
+ if (r.avisos.length) projeto.anotar(p.id, 'estilo', r.avisos.join(' · '));
1675
+ }
1676
+ if (estilo === 'gerativo' && !roteiro.escolhasGerativo) {
1677
+ roteiro.escolhasGerativo = p.escolhasGerativo || gerativo.escolherVisual(roteiro);
1678
+ if (!p.escolhasGerativo) projeto.salvar(p.id, { escolhasGerativo: roteiro.escolhasGerativo });
1679
+ }
1680
+ /* O ESTILO DA CASA (13/10, o primocode-ele-constroi.mp4 que o Joel aprovou):
1681
+ chão escuro com brilho, frase média, palavra que entra desfocando, Inter
1682
+ e JetBrains Mono. Vale para o vídeo de TECNOLOGIA (o do PrimoCode) quando
1683
+ a IA não montou estilo: em todo vídeo, a padaria saía igual — "animações
1684
+ tudo igual, cores sempre as mesmas, sem ícones" (14/10). */
1685
+ const casa = estilo === 'gerativo' && !roteiro.estiloVisual && (roteiro.escolhasGerativo || {}).humor === 'tecnologia';
1686
+ if (casa && !/\bfontes?\b|tipografia|\bserifa/i.test(pedidoTxt)) {
1687
+ roteiro.marca = { ...(roteiro.marca || {}), fontes: { titulo: 'Inter', texto: 'JetBrains Mono' } };
1688
+ }
1689
+ if (casa) roteiro.casa = true;
1690
+ if (ref.modo === 'fechado' && !roteiro.busca && referencias.termos().length) roteiro.busca = referencias.termos();
1691
+ /* A BIBLIOTECA (biblioteca.js): sem fonte e cor da marca, o híbrido, o
1692
+ cinema e o impacto caíam sempre no Inter e no azul e roxo — "os vídeos
1693
+ todos iguais" (02/10). A marca manda; depois o roteiro.visual da IA;
1694
+ sem nada, o sorteio que pula o que os últimos vídeos usaram. */
1695
+ if (['hibrido', 'cinema', 'impacto'].includes(estilo)) {
1696
+ const v = biblioteca.vestir(roteiro, { estilo });
1697
+ if (v.mudou) projeto.anotar(p.id, 'visual', [v.titulo && `fonte ${v.titulo} + ${v.texto} (tom ${v.tom})`, v.paleta && `paleta ${v.paleta}`].filter(Boolean).join(', '));
1698
+ }
1699
+ // Os estilos de motion usam os efeitos leves e a trilha do ende.app; os de corte, os cheios.
1700
+ const ehMotion = LEVES.has(estilo);
1701
+ const modo = (args.modo || roteiro.modo || (p.formato === 'slides' || p.formato === 'arte' ? 'slides' : 'video'));
1702
+ const [largura, altura] = PROPORCOES[roteiro.proporcao || args.proporcao] || (modo === 'video' && PROPORCOES[proporcaoDoPedido(p.pedido)]) || PROPORCOES['16:9'];
1703
+
1704
+ const iconesOk = new Set();
1705
+ for (const nome of composicao.iconesDoRoteiro(roteiro)) {
1706
+ try { const r = await assets.icone(nome); if (r && r.ok) iconesOk.add(nome); } catch { /* sem */ }
1707
+ }
1708
+ /* O ACERVO DA MARCA (guardado pelo estudio_site): as fotos reais entram
1709
+ nas partes de imagem e de FUNDO nas cenas de texto; os vídeos, nas
1710
+ partes de imagem do vídeo. A foto escolhida é a que mais combina, pela
1711
+ descrição, com o que a parte diz. Sem acervo, vale a busca (Pexels). */
1712
+ const acervo = (p.acervo && (p.acervo.fotos || []).length) ? p.acervo : { fotos: [], videos: [] };
1713
+ const usadas = new Set();
1714
+ const palavrasDe = (t) => new Set(String(t || '').normalize('NFD').replace(/[\u0300-\u036f]/g, '').toLowerCase().split(/[^a-z0-9]+/).filter((w) => w.length >= 4));
1715
+ const melhorFoto = (texto) => {
1716
+ const quer = palavrasDe(texto);
1717
+ let melhor = null, pontos = -1;
1718
+ for (const f of acervo.fotos) {
1719
+ if (usadas.has(f.src)) continue;
1720
+ const n = [...palavrasDe(f.alt)].filter((w) => quer.has(w)).length;
1721
+ if (n > pontos) { melhor = f; pontos = n; }
1722
+ }
1723
+ if (melhor) usadas.add(melhor.src);
1724
+ return melhor ? { src: melhor.src, tipo: 'imagem' } : null;
1725
+ };
1726
+ const videosMarca = [...(acervo.videos || [])];
1727
+ const imagens = {}, fundos = {};
1728
+ for (const [i, parte] of partes.entries()) {
1729
+ if (semImagem || parte.tipo !== 'imagem' || parte.src) continue;
1730
+ const texto = `${parte.titulo || ''} ${parte.sub || ''} ${parte.fala || ''} ${parte.busca || ''}`;
1731
+ if (modo === 'video' && videosMarca.length && i % 2 === 1) { imagens[i] = { src: videosMarca.shift().src, tipo: 'video' }; continue; }
1732
+ const m = melhorFoto(texto) || (parte.busca ? await baixarApoio(p, parte.busca, { orientacao: largura >= altura ? 'landscape' : 'portrait', video: modo === 'video' }) : null);
1733
+ if (m) imagens[i] = m;
1734
+ }
1735
+ if (acervo.fotos.length && !semImagem) {
1736
+ const comFundo = ['abertura', 'titulo', 'contraste', 'citacao', 'cta', 'passos'];
1737
+ let alterna = 0;
1738
+ for (const [i, parte] of partes.entries()) {
1739
+ if (!comFundo.includes(parte.tipo)) continue;
1740
+ if (i !== 0 && alterna++ % 2 === 1) continue; // uma sim, uma não: o respiro também é ritmo
1741
+ const m = melhorFoto(`${parte.titulo || ''} ${parte.sim || ''} ${parte.fala || ''}`);
1742
+ if (m) fundos[i] = m;
1743
+ }
1744
+ }
1745
+
1746
+ let tempos = [], narracao = null, sons = {}, trilha = null;
1747
+ /* O HÍBRIDO (hibrido.js) é o cinema com o kit por cima: o roteiro de
1748
+ qualquer estilo vira os tipos do cinema aqui, antes da voz — a voz lê
1749
+ o que o cinema vai mostrar. */
1750
+ let hib = null;
1751
+ if (modo === 'video' && estilo === 'hibrido') {
1752
+ hib = hibrido.traduzir(roteiro);
1753
+ partes.splice(0, partes.length, ...hib.roteiro.partes);
1754
+ }
1755
+ if (modo === 'video' && (estilo === 'cinema' || estilo === 'hibrido')) {
1756
+ // Só as partes com voz vão para a narração; o depoimento tem a voz do aluno.
1757
+ // Só as partes com voz: o depoimento tem a voz do aluno, e a parte muda não tem voz.
1758
+ // A parte com voz forte é narrada à parte: se entrasse aqui também, seria falada duas vezes (e muda uma delas).
1759
+ const comVoz = partes.filter((pt) => pt.tipo !== 'depoimento' && cinema.falaDe(pt) !== '' && !pt.falaForte);
1760
+ const lista = comVoz.map((pt) => ({ texto: cinema.falaDe(pt), registro: 'normal' }));
1761
+ // Duas vozes: a voz de cada parte pelo falante dela (roteiro.vozes).
1762
+ const vozesL = falantes.vozesDasPartes(comVoz, roteiro, args.voz || roteiro.voz);
1763
+ const variasVozes = new Set(vozesL).size > 1;
1764
+ const DIRECAO_CINEMA = 'Leia em português do Brasil como narrador de trailer de marca premium: voz grave, confiante e humana, '
1765
+ + 'ritmo firme, pausas curtas entre as frases, sem arrastar.';
1766
+ const mp3 = path.join(p.pasta, 'midia', `narracao-${Date.now().toString(36)}.mp3`);
1767
+ /* O CACHE DA VOZ: a mesma fala, na mesma voz, não é gerada duas vezes.
1768
+ Refazer o roteiro em outro formato, ou mexer numa cena, não gasta a
1769
+ cota do Gemini — que acaba no meio do dia (medido em 25/09). */
1770
+ const chaveVoz = require('crypto').createHash('sha1').update(JSON.stringify([lista.map((x) => x.texto), args.voz || roteiro.voz || '', 'cinema-v1'])).digest('hex').slice(0, 16);
1771
+ const cacheDir = path.join(os.homedir(), '.primocode', 'studio', 'cache-voz');
1772
+ const cacheMp3 = path.join(cacheDir, chaveVoz + '.mp3'), cacheJson = path.join(cacheDir, chaveVoz + '.json');
1773
+ let v = null;
1774
+ // motorVoz "edge": a voz do Edge direto, sem esperar a cota do Gemini ("a narração pode manter a do Edge", 25/09).
1775
+ const soEdge = String(roteiro.motorVoz || args.motorVoz || '').toLowerCase() === 'edge';
1776
+ if (variasVozes) {
1777
+ /* Um grupo por falante, cada um com a sua voz e o seu cache (a chave
1778
+ do narrarComCache leva a voz). Falhou? Fica anotado, e a reserva
1779
+ de baixo narra numa voz só — melhor o vídeo do que nada. */
1780
+ v = await falantes.narrarPorFalante(lista.map((x, i) => ({ ...x, voz: vozesL[i] })), mp3, { juntar: juntarVozes,
1781
+ narrarUm: async (l, m, voz) => {
1782
+ const g = soEdge ? { ok: false } : await narrarComCache(l, m, { voz, direcao: DIRECAO_CINEMA });
1783
+ if (g.ok) return g;
1784
+ const a = m.replace(/\.mp3$/, '.json');
1785
+ fs.writeFileSync(a, JSON.stringify(l));
1786
+ return narrarReserva(l, m, a, voz, 'antonio', { soEdge });
1787
+ } });
1788
+ if (!v.ok) projeto.anotar(p.id, 'narracao', `as duas vozes falharam (${v.error}); saiu numa voz só`);
1789
+ if (!v.ok) {
1790
+ const arq = path.join(p.pasta, 'midia', `roteiro-${Date.now().toString(36)}.json`);
1791
+ fs.writeFileSync(arq, JSON.stringify(lista.map((x) => ({ ...x, registro: 'normal' }))));
1792
+ v = await narrarReserva(lista, mp3, arq, args.voz || roteiro.voz, 'antonio', { soEdge });
1793
+ }
1794
+ } else {
1795
+ const arq = path.join(p.pasta, 'midia', `roteiro-${Date.now().toString(36)}.json`);
1796
+ const gemini = async () => {
1797
+ if (fs.existsSync(cacheMp3) && fs.existsSync(cacheJson)) {
1798
+ fs.copyFileSync(cacheMp3, mp3);
1799
+ const g = { ok: true, ...JSON.parse(fs.readFileSync(cacheJson, 'utf8')), doCache: true };
1800
+ // Cache sem as palavras (vindo de um plano antigo): transcreve de novo e realinha — sem gastar voz.
1801
+ if (!(g.partes || []).some((pt) => (pt.palavras || []).length)) {
1802
+ try {
1803
+ const cfg = require('../../config/config').loadConfig();
1804
+ const tr = await require('../../provider/api').requestTranscricao(cfg.server, { token: cfg.token, audio: fs.readFileSync(mp3).toString('base64'), nome: 'voz.mp3', idioma: 'pt' });
1805
+ if (tr && (tr.palavras || []).length) {
1806
+ g.partes = alinharPartes(lista, tr.palavras, g.segundos);
1807
+ fs.writeFileSync(cacheJson, JSON.stringify({ voz: g.voz, segundos: g.segundos, partes: g.partes }));
1808
+ }
1809
+ } catch { /* fica o alinhamento guardado */ }
1810
+ }
1811
+ return g;
1812
+ }
1813
+ const g = await narrarComGemini(lista, mp3, { voz: args.voz || roteiro.voz, direcao: DIRECAO_CINEMA });
1814
+ if (g.ok) {
1815
+ try { fs.mkdirSync(cacheDir, { recursive: true }); fs.copyFileSync(mp3, cacheMp3); fs.writeFileSync(cacheJson, JSON.stringify({ voz: g.voz, segundos: g.segundos, partes: g.partes })); } catch { /* sem cache */ }
1816
+ }
1817
+ return g;
1818
+ };
1819
+ v = await produzirNecessidade(p, roteiro, { tipo: 'voz', chave: [lista.map((x) => x.texto), args.voz || roteiro.voz || '', 'cinema-v1', soEdge], destino: mp3 },
1820
+ provedoresDeVoz(lista, mp3, arq, args.voz || roteiro.voz, 'antonio', { soEdge, gemini, escolha: (roteiro.provedores || {}).voz }));
1821
+ }
1822
+ if (!v.ok) return v;
1823
+ /* A DURAÇÃO que o roteiro pede ("60–75 s"): se a voz passa do que cabe,
1824
+ ela acelera de leve — até 25%, sem mudar o tom (atempo) — e os tempos
1825
+ de cada parte acompanham. Medido em 25/09: 98 s de voz num vídeo de 70. */
1826
+ const alvo = Number(roteiro.duracao || args.segundos) || 0;
1827
+ let ritmoVoz = 1;
1828
+ if (alvo) {
1829
+ const depo = partes.filter((pt) => pt.tipo === 'depoimento').reduce((n, pt) => n + (pt.clipes || []).reduce((m, c) => m + (c.ate - c.de + 0.3), 0), 0);
1830
+ // A voz forte (narrada à parte) e as partes mudas também ocupam o tempo.
1831
+ const forteEst = partes.filter((pt) => pt.falaForte).reduce((n, pt) => n + cinema.falaDe({ ...pt, fala: undefined }).length / 13 + 1.9, 0);
1832
+ const mudas = partes.filter((pt) => pt.tipo !== 'depoimento' && cinema.falaDe(pt) === '').length * 4;
1833
+ const cabe = Math.max(15, alvo - depo - forteEst - mudas - 0.45 * lista.length);
1834
+ if (v.segundos > cabe * 1.05) {
1835
+ const k = Math.min(1.25, v.segundos / cabe);
1836
+ ritmoVoz = k;
1837
+ const rapido = mp3.replace(/\.mp3$/, '-r.mp3');
1838
+ const c = await video.rodar(video.ffmpeg(), ['-y', '-i', mp3, '-filter:a', `atempo=${k.toFixed(3)}`, rapido], { timeout: 120000 });
1839
+ if (c.ok) {
1840
+ fs.renameSync(rapido, mp3);
1841
+ const div = (x) => Math.round((x / k) * 1000) / 1000;
1842
+ v.partes = v.partes.map((pt) => ({ de: div(pt.de), ate: div(pt.ate), palavras: (pt.palavras || []).map((w) => ({ ...w, de: div(w.de), ate: div(w.ate) })) }));
1843
+ v.segundos = div(v.segundos);
1844
+ }
1845
+ }
1846
+ }
1847
+ /* No HÍBRIDO a voz anda um pouco mais rápido por padrão (1,12×, como no
1848
+ vox): o trailer premium do cinema lido pelo Gemini sai no passo de
1849
+ leitura, e o vídeo segue a voz. `roteiro.ritmoVoz` ajusta. */
1850
+ if (hib && ritmoVoz <= 1.01) {
1851
+ const kh = Math.max(1, Math.min(1.5, Number(roteiro.ritmoVoz) || 1.12));
1852
+ const rapido = mp3.replace(/\.mp3$/, '-h.mp3');
1853
+ const c = kh > 1.01 ? await video.rodar(video.ffmpeg(), ['-y', '-i', mp3, '-filter:a', `atempo=${kh.toFixed(3)}`, rapido], { timeout: 120000 }) : { ok: false };
1854
+ if (process.env.PRIMOCODE_TRACO === '1') process.stderr.write(`[traço] voz do híbrido ${kh}× ok=${c.ok} existe=${fs.existsSync(rapido)} ${String(c.erro || '').slice(-120)}\n`);
1855
+ if (c.ok && fs.existsSync(rapido)) {
1856
+ fs.renameSync(rapido, mp3);
1857
+ ritmoVoz = kh;
1858
+ const div = (x) => Math.round((x / kh) * 1000) / 1000;
1859
+ v.partes = v.partes.map((pt) => ({ de: div(pt.de), ate: div(pt.ate), palavras: (pt.palavras || []).map((w) => ({ ...w, de: div(w.de), ate: div(w.ate) })) }));
1860
+ v.segundos = div(v.segundos);
1861
+ }
1862
+ }
1863
+ projeto.anotar(p.id, 'narracao', `${v.segundos}s em ${lista.length} partes, voz ${v.voz}`);
1864
+ /* A chave leva o id do projeto e o hash das falas. Só `cinema` fazia um
1865
+ roteiro novo, no mesmo projeto, reaproveitar os efeitos do anterior. */
1866
+ const marcaSfx = require('crypto').createHash('sha1').update(JSON.stringify({ id: p.id || '', falas: partes.map((pt) => cinema.falaDe(pt)) })).digest('hex').slice(0, 16);
1867
+ const sonsC = (await produzirNecessidade(p, roteiro, { tipo: 'sfx', chave: [p.id || '', marcaSfx] },
1868
+ [{ nome: 'openverse', gerar: async () => ({ sons: await sonsReais(p, video) }) }])).sons || {};
1869
+ // Vários termos e durações: vídeo sem música foi o que saiu na primeira vez (25/09).
1870
+ // E só instrumental: "essa música daria pra deixar só o instrumental?" — a faixa é OUVIDA.
1871
+ // O termo sai do clima do roteiro (variedade.js), não de uma lista fixa de "cinematic inspiring".
1872
+ let trilhaC = (await produzirNecessidade(p, roteiro, { tipo: 'trilha', chave: ['cinema', roteiro.clima || '', roteiro.genero || ''] },
1873
+ [{ nome: 'jamendo', gerar: async () => {
1874
+ for (const termo of [...variedade.termosTrilha(roteiro, 'cinema'), 'instrumental']) {
1875
+ try {
1876
+ const b = await assets.procurarMusica(termo, { quantas: 10, duracaoMin: 45 });
1877
+ for (const item of variedade.ordenar(b.ok ? b.sons : [], 'trilha').filter((x) => !/vocal|voice|feat|ft\.|remix/i.test(x.titulo || '')).slice(0, 4)) {
1878
+ const d = await assets.baixar(item, { pasta: p.pasta, nome: 'trilha' });
1879
+ if (!d.ok) continue;
1880
+ if (await temLetra(path.join(p.pasta, d.relativo))) { projeto.anotar(p.id, 'midia', `trilha com voz descartada: ${item.titulo}`); continue; }
1881
+ variedade.marcar('trilha', item.url);
1882
+ const credito = `"${termo}": ${item.titulo} — ${item.autor || 'Jamendo'} (${item.licenca || 'CC'})`;
1883
+ projeto.anotar(p.id, 'trilha', credito);
1884
+ return { src: d.relativo, credito };
1885
+ }
1886
+ } catch { /* o próximo termo */ }
1887
+ }
1888
+ return null;
1889
+ } }])).src || null;
1890
+ /* A MÚSICA mais baixa na origem: a faixa vem masterizada alta e comprimida,
1891
+ e mesmo a 30% ela cobria a voz e o depoimento ("a música tá muito
1892
+ alta, não dá pra ouvir as pessoas", 25/09). Ela vai a -28 LUFS antes
1893
+ da mistura; os volumes do plano partem daí. */
1894
+ if (trilhaC) {
1895
+ const norm = path.join(p.pasta, 'midia', 'trilha-baixa-' + path.basename(trilhaC).replace(/\.[a-z0-9]+$/i, '.mp3'));
1896
+ const c = await video.rodar(video.ffmpeg(), ['-y', '-i', path.join(p.pasta, trilhaC), '-af', 'loudnorm=I=-28:TP=-6:LRA=11', '-ar', '44100', norm], { timeout: 5 * 60000 });
1897
+ if (c.ok) trilhaC = path.relative(p.pasta, norm).replace(/\\/g, '/');
1898
+ }
1899
+ /* AS FOTOS, separadas e enquadradas. "Uma sala, 20 cadeiras" com foto de
1900
+ dashboard "não tem nada a ver" (25/09): foto de gente e print de tela
1901
+ são coisas diferentes, e a miniatura de depoimento fica de fora. E
1902
+ onde estão os rostos, para o recorte vertical não cortar ninguém. */
1903
+ const TELA = /dashboard|pauta|kpi|tend[eê]ncias|landing|review|tela|screen|painel|relat[oó]rio/i;
1904
+ const MINI = /poster|face \d+|\bthumb/i;
1905
+ const fotosC = acervo.fotos.filter((f) => !MINI.test(f.alt || ''))
1906
+ .map((f) => ({ src: f.src, tipo: 'imagem', cat: TELA.test(f.alt || '') ? 'tela' : 'pessoas', alt: f.alt }));
1907
+ /* O B-ROLL do híbrido: o cinema vive de foto que troca por baixo do
1908
+ texto, e o acervo da marca raramente passa de meia dúzia. Vídeo de
1909
+ banco primeiro (o fundo que se move sozinho), foto como reserva —
1910
+ em paralelo, porque são oito buscas. */
1911
+ /* Foto de compartilhamento (og:image) e logo trazem o NOME da marca em
1912
+ letra gigante: como fundo, viravam um "THRO" cortado atrás do texto. */
1913
+ /* E arte de banner (2400×1260 e afins): é o logo da marca desenhado, não
1914
+ uma cena — cortada no vídeo em pé, vira um "✳ Cl" gigante. */
1915
+ const banner = (alt) => { const m = /(\d{3,4})x(\d{3,4})/.exec(alt || ''); return m && Number(m[1]) / Number(m[2]) > 1.7 && altura > largura; };
1916
+ if (hib) for (let q = fotosC.length - 1; q >= 0; q--) if (/open graph|og[:_ -]?image|\blogo|banner|wordmark/i.test(fotosC[q].alt || '') || banner(fotosC[q].alt)) fotosC.splice(q, 1);
1917
+ if (hib && fotosC.length < 14) {
1918
+ const orientacao = largura >= altura ? 'landscape' : 'portrait';
1919
+ const pastaMidia = path.join(p.pasta, 'midia');
1920
+ const jaTem = (() => { try { return fs.readdirSync(pastaMidia); } catch { return []; } })();
1921
+ const cat = (termo) => (/screen|code|data|server|dashboard/i.test(termo) ? 'tela' : 'pessoas');
1922
+ /* A versão LEVE do b-roll: o Pexels entrega 1080×1920 inteiro (até 30
1923
+ MB e 20 s), e o render parava num quadro esperando vários vídeos
1924
+ assim ao mesmo tempo (medido: timeout de 120 s no quadro 184). Cada
1925
+ um vira 8 s, 720 de largura, sem áudio — e fica guardado, para o
1926
+ próximo render não baixar de novo. */
1927
+ const leve = async (rel, destino) => {
1928
+ const alvo = path.join(pastaMidia, destino);
1929
+ const escala = largura >= altura ? 'scale=1280:-2' : 'scale=720:-2';
1930
+ const c = await video.rodar(video.ffmpeg(), ['-y', '-i', path.join(p.pasta, rel), '-t', '8', '-vf', escala + ',fps=30', '-an',
1931
+ '-c:v', 'libx264', '-preset', 'veryfast', '-crf', '24', '-pix_fmt', 'yuv420p', '-movflags', '+faststart', alvo], { timeout: 180000 });
1932
+ if (!c.ok || !fs.existsSync(alvo)) return null;
1933
+ try { fs.unlinkSync(path.join(p.pasta, rel)); } catch { /* fica o original */ }
1934
+ return 'midia/' + destino;
1935
+ };
1936
+ // banco: true marca o que veio do banco (Pexels): a rota produto prefere a tela da marca (hibrido.ancorar).
1937
+ const achados = await Promise.all(hibrido.termosDeBusca(roteiro, hib.extras).map(async (termo) => {
1938
+ const out = [];
1939
+ const slug = 'broll-' + String(termo).toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
1940
+ const proxy = `${slug}.leve.mp4`;
1941
+ if (jaTem.includes(proxy)) out.push({ src: 'midia/' + proxy, tipo: 'video', cat: cat(termo), alt: termo, banco: true });
1942
+ else try {
1943
+ // Sorteado entre os não usados, com o termo variado (variedade.js, 05/10).
1944
+ const itens = await variedade.buscarSemRepetir(async (t) => {
1945
+ const b = await assets.procurarVideos(t, { quantas: 8, orientacao });
1946
+ return (b.ok ? b.videos : []).filter((v) => !v.duracao || v.duracao >= 4);
1947
+ }, termo);
1948
+ for (const item of itens.slice(0, 1)) {
1949
+ const d = await assets.baixar(item, { pasta: p.pasta, nome: slug });
1950
+ const l = d.ok ? await leve(d.relativo, proxy) : null;
1951
+ if (l) { out.push({ src: l, tipo: 'video', cat: cat(termo), alt: termo, banco: true }); variedade.marcar('broll', item.url); }
1952
+ }
1953
+ } catch { /* segue com a foto */ }
1954
+ const foto = jaTem.find((f) => f.startsWith(slug + '-') && /\.(jpe?g|png|webp)$/i.test(f));
1955
+ if (foto) out.push({ src: 'midia/' + foto, tipo: 'imagem', cat: cat(termo), alt: termo, banco: true });
1956
+ else try {
1957
+ const itens = await variedade.buscarSemRepetir(async (t) => {
1958
+ const b = await assets.procurarImagens(t, { quantas: 8, orientacao });
1959
+ return b.ok ? b.imagens : [];
1960
+ }, termo);
1961
+ for (const item of itens.slice(0, 1)) {
1962
+ const d = await assets.baixar(item, { pasta: p.pasta, nome: slug });
1963
+ if (d.ok) { out.push({ src: d.relativo, tipo: 'imagem', cat: cat(termo), alt: termo, banco: true }); variedade.marcar('broll', item.url); }
1964
+ }
1965
+ } catch { /* sem */ }
1966
+ return out;
1967
+ }));
1968
+ const novos = achados.flat();
1969
+ // Intercalados com as da marca: a foto da marca não pode ficar toda no começo.
1970
+ const marcaF = fotosC.splice(0);
1971
+ for (let q = 0; q < Math.max(marcaF.length, novos.length); q++) {
1972
+ if (novos[q]) fotosC.push(novos[q]);
1973
+ if (marcaF[q]) fotosC.push(marcaF[q]);
1974
+ }
1975
+ projeto.anotar(p.id, 'midia', `b-roll do híbrido: ${novos.filter((f) => f.tipo === 'video').length} vídeos e ${novos.filter((f) => f.tipo === 'imagem').length} fotos`);
1976
+ }
1977
+ const rostos = await acharRostos(p, fotosC.filter((f) => f.tipo !== 'video').map((f) => f.src));
1978
+ for (const f of fotosC) if (rostos[f.src]) f.rosto = rostos[f.src];
1979
+ // Os depoimentos: cortados na palavra, com a voz no volume certo e fade.
1980
+ for (const pt of partes) {
1981
+ if (pt.tipo !== 'depoimento') continue;
1982
+ for (const c of pt.clipes || []) Object.assign(c, await prepararDepoimento(p, c));
1983
+ }
1984
+ // A voz FORTE: a parte com "falaForte" é narrada à parte, com a direção dela.
1985
+ const fortes = {};
1986
+ let iNarr = 0;
1987
+ for (const [i, pt] of partes.entries()) {
1988
+ if (pt.tipo === 'depoimento' || cinema.falaDe(pt) === '') continue;
1989
+ if (pt.falaForte) {
1990
+ const arqF = path.join(p.pasta, 'midia', `voz-forte-${i + 1}-${Date.now().toString(36)}.mp3`);
1991
+ // falaForte: true → a voz forte lê o texto da tela.
1992
+ const textoForte = pt.falaForte === true ? cinema.falaDe({ ...pt, fala: undefined }) : pt.falaForte;
1993
+ const soEdgeF = String(roteiro.motorVoz || args.motorVoz || '').toLowerCase() === 'edge';
1994
+ // A voz forte é a de quem fala a parte (duas vozes), não sempre a do narrador.
1995
+ const vozForte = falantes.vozesDasPartes([pt], roteiro, args.voz || roteiro.voz)[0];
1996
+ const vf = soEdgeF ? await (async () => {
1997
+ // No Edge, a ênfase é o registro "contraste": a mesma voz, um pouco mais firme.
1998
+ const arqJ = arqF.replace(/\.mp3$/, '.json');
1999
+ fs.writeFileSync(arqJ, JSON.stringify([{ texto: textoForte, registro: 'contraste' }]));
2000
+ return rodarPython('narrar.py', ['roteiro', '--arquivo', arqJ, '--saida', arqF, '--voz', String(vozForte || 'antonio')], { timeout: 5 * 60000 });
2001
+ })() : await narrarComCache([{ texto: textoForte }], arqF, { voz: vozForte,
2002
+ // A MESMA voz do narrador, só com um pouco mais de ênfase: "não é mudar a voz, é só um pouco a entonação" (25/09).
2003
+ direcao: pt.entonacao || 'Leia em português do Brasil com a mesma voz e o mesmo ritmo de um narrador de trailer de marca: '
2004
+ + 'confiante e natural, só um pouco mais de ênfase nas palavras principais. Sem dramatizar.' });
2005
+ // A voz forte no mesmo ritmo da narração (se ela foi acelerada, esta também).
2006
+ if (vf.ok && ritmoVoz > 1.01) {
2007
+ const rap = arqF.replace(/\.mp3$/, '-r.mp3');
2008
+ const c = await video.rodar(video.ffmpeg(), ['-y', '-i', arqF, '-filter:a', `atempo=${ritmoVoz.toFixed(3)}`, rap], { timeout: 120000 });
2009
+ if (c.ok) {
2010
+ fs.renameSync(rap, arqF);
2011
+ vf.segundos = vf.segundos / ritmoVoz;
2012
+ if (vf.partes && vf.partes[0]) vf.partes[0].palavras = (vf.partes[0].palavras || []).map((w) => ({ ...w, de: w.de / ritmoVoz, ate: w.ate / ritmoVoz }));
2013
+ }
2014
+ }
2015
+ if (vf.ok) fortes[i] = { src: path.relative(p.pasta, arqF).replace(/\\/g, '/'), segundos: vf.segundos, palavras: (vf.partes[0] || {}).palavras || [] };
2016
+ }
2017
+ iNarr++;
2018
+ }
2019
+ const r = cinema.montarCinema({ roteiro, largura, altura, tempos: v.partes, narracao: path.relative(p.pasta, mp3).replace(/\\/g, '/'),
2020
+ sons: sonsC, trilha: trilhaC, fotos: fotosC, fortes, ritmoLeitura: hib ? 0.55 : 1 });
2021
+ if (r.ok && hib) {
2022
+ hibrido.enfeitar(r.plano, { extras: hib.extras, partes, marca: roteiro.marca || {}, largura, altura, hud: roteiro.hud === true, particulas: roteiro.particulas === true,
2023
+ // O b-roll de cada frase troca 0,2 s depois da palavra-âncora (hibrido.ancorar).
2024
+ tempos: v.partes, fortes, fotos: fotosC });
2025
+ r.resumo.estilo = 'hibrido';
2026
+ }
2027
+ if (r.ok) projeto.anotar(p.id, 'plano', `estilo ${hib ? 'hibrido' : 'cinema'}: ${r.resumo.cenas} cenas, ${r.resumo.segundos}s`);
2028
+ return r;
2029
+ }
2030
+ if (modo === 'video' && semVoz) {
2031
+ /* Sem voz, sem tempo medido: cada parte dura o `duracao` dela (ou o que o
2032
+ texto da tela pede), e as palavras são repartidas na parte. Os sons
2033
+ leves entram depois do plano, em cada corte e entrada (sem-narracao.js). */
2034
+ tempos = semNarracao.tempos(partes, { falaDe: composicao.falaDe });
2035
+ args.__semNarracao = { tempos, cues: semNarracao.cuesDe(partes, tempos) };
2036
+ const total = tempos.length ? tempos[tempos.length - 1].ate : 0;
2037
+ projeto.anotar(p.id, 'narracao', `sem narração: ${Math.round(total * 10) / 10}s em ${partes.length} partes, só motion e efeitos sonoros`);
2038
+ sons = estilo === 'gerativo' ? {} : ehMotion ? sonsLeves.preparar(p.pasta) : await edicao.prepararSons(p.pasta, video);
2039
+ }
2040
+ if (modo === 'video' && !semVoz) {
2041
+ const lista = partes.map((pt, i) => ({ texto: composicao.falaDe(pt), registro: composicao.registroDe(pt, i, partes.length) }));
2042
+ const arq = path.join(p.pasta, 'midia', `roteiro-${Date.now().toString(36)}.json`);
2043
+ fs.mkdirSync(path.dirname(arq), { recursive: true });
2044
+ fs.writeFileSync(arq, JSON.stringify(lista));
2045
+ const mp3 = path.join(p.pasta, 'midia', `narracao-${Date.now().toString(36)}.mp3`);
2046
+ // A voz de gente primeiro (Gemini, pelo servidor); o Edge é a reserva.
2047
+ // Com cache: refazer o vídeo (outro estilo, outra proporção) não gasta a cota da voz.
2048
+ /* A DIREÇÃO DA VOZ. O servidor manda a direção e o texto no MESMO pedido,
2049
+ e o Gemini às vezes lê o começo dela em voz alta: todo vídeo do fluido
2050
+ abria com "Rápido e contínuo." (11/10, "em tudo ela coloca isso, pode
2051
+ ser um negócio de padaria"). Então a direção é curta, descreve só o
2052
+ TOM, e não tem palavra solta que soe como a primeira frase de um
2053
+ roteiro ("rápido", "contínuo", caixa alta). A velocidade não vem
2054
+ daqui: vem do atempo (ritmoVoz) depois da voz pronta. */
2055
+ const direcao = DIRECAO_DA_VOZ[estilo] || DIRECAO_DA_VOZ.padrao;
2056
+ /* Uma voz por falante (falantes.js). Com uma voz só, um grupo só: é a
2057
+ narração de sempre, com o mesmo cache. */
2058
+ const vozesL = falantes.vozesDasPartes(partes, roteiro, args.voz || roteiro.voz);
2059
+ let v = await produzirNecessidade(p, roteiro, { tipo: 'voz', chave: [lista.map((x) => x.texto), vozesL, direcao], destino: mp3 }, [{
2060
+ nome: ((roteiro.provedores || {}).voz) || 'estudio',
2061
+ gerar: async () => {
2062
+ let reserva = false, gemini = false;
2063
+ const comLista = lista.map((x, i) => ({ ...x, voz: vozesL[i] }));
2064
+ const pelaReserva = async (l, m, voz) => {
2065
+ // O Kokoro pedido já foi tentado no narrarComCache: a reserva não repete.
2066
+ const a = m === mp3 ? arq : m.replace(/\.mp3$/, '.json');
2067
+ if (a !== arq) fs.writeFileSync(a, JSON.stringify(l));
2068
+ const rr = await narrarReserva(l, m, a, voz, 'thalita', { semKokoro: kokoro.querKokoro(voz) });
2069
+ if (rr && rr.ok) reserva = true;
2070
+ return rr;
2071
+ };
2072
+ let r = await falantes.narrarPorFalante(comLista, mp3, { juntar: juntarVozes,
2073
+ narrarUm: async (l, m, voz) => {
2074
+ const g = await narrarComCache(l, m, { voz, direcao });
2075
+ if (g.ok) { gemini = true; return g; }
2076
+ return pelaReserva(l, m, voz);
2077
+ } });
2078
+ /* UMA VOZ SÓ POR VÍDEO (11/10, "os personagens falam com vozes
2079
+ diferentes em cada cena"): a cota do Gemini acabava no meio, e o
2080
+ mesmo personagem saía Gemini numa fala e reserva na outra. Se
2081
+ misturou, o vídeo inteiro é refeito na reserva — pior que o
2082
+ Gemini, mas cada um com a mesma voz do começo ao fim. */
2083
+ if (r && r.ok && reserva && gemini) {
2084
+ gemini = false;
2085
+ r = await falantes.narrarPorFalante(comLista, mp3, { juntar: juntarVozes, narrarUm: pelaReserva });
2086
+ }
2087
+ /* A voz de RESERVA (Kokoro/Edge, quando o Gemini falhou) não vai para o
2088
+ cache do projeto: guardada, ela voltava em todo refazer do mesmo
2089
+ texto, mesmo com o Gemini de pé — era a "voz robótica que não sai"
2090
+ (11/10). Na próxima vez o Gemini é tentado de novo. */
2091
+ return r && r.ok ? { ...r, arquivo: mp3, ...(reserva ? { naoGuardar: true } : {}) } : r;
2092
+ },
2093
+ }]);
2094
+ if (!v.ok) return v;
2095
+ /* O RITMO DA VOZ. Mesmo com a direção, a voz sai no passo de leitura, e
2096
+ o vídeo — que segue a voz palavra por palavra — sai lento junto. O
2097
+ áudio acelera 1,12× (1,3× ficou corrido demais, 29/09; atempo não muda o tom) e cada tempo de palavra
2098
+ acompanha; `roteiro.ritmoVoz` ajusta (1 desliga). */
2099
+ // O fluido corre mais ("mais rápido", 06/10): 1,22× por padrão.
2100
+ const ritmo = Math.max(1, Math.min(1.5, Number(roteiro.ritmoVoz || args.ritmoVoz) || (estilo === 'fluido' ? 1.22 : estilo === 'personagem' ? 1.06 : 1.12)));
2101
+ if (ritmo > 1.01) {
2102
+ const rap = mp3.replace(/\.mp3$/, '-r.mp3');
2103
+ const c = await video.rodar(video.ffmpeg(), ['-y', '-i', mp3, '-filter:a', `atempo=${ritmo.toFixed(3)}`, rap], { timeout: 120000 });
2104
+ if (c.ok && fs.existsSync(rap)) {
2105
+ fs.renameSync(rap, mp3);
2106
+ const esc = (x) => (typeof x === 'number' ? Math.round((x / ritmo) * 1000) / 1000 : x);
2107
+ v.segundos = esc(v.segundos);
2108
+ v.partes = (v.partes || []).map((pt) => ({ ...pt, de: esc(pt.de), ate: esc(pt.ate),
2109
+ palavras: (pt.palavras || []).map((w) => ({ ...w, de: esc(w.de), ate: esc(w.ate) })) }));
2110
+ }
2111
+ }
2112
+ tempos = v.partes;
2113
+ args.__barulhinhos = { tempos, cues: semNarracao.cuesDe(partes, tempos) };
2114
+ narracao = path.relative(p.pasta, mp3).replace(/\\/g, '/');
2115
+ projeto.anotar(p.id, 'narracao', `${v.segundos}s em ${partes.length} partes, voz ${v.voz}`);
2116
+ // O motion usa os efeitos leves; os estilos de corte, os cheios.
2117
+ // O gerativo tem a família de sons DELE (sintetizada da semente); os outros motion, os leves.
2118
+ // O gerativo desenha os sons DEPOIS da partitura (um arquivo por evento, da própria trilha).
2119
+ sons = estilo === 'gerativo' ? {}
2120
+ : ehMotion ? sonsLeves.preparar(p.pasta) : await edicao.prepararSons(p.pasta, video);
2121
+ }
2122
+ // A trilha vale com e sem voz: o vídeo sem narração ainda tem música.
2123
+ if (modo === 'video') {
2124
+ // A trilha do motion: ende.app (CC BY 4.0, sem Content ID), clima tecnologia.
2125
+ if (ehMotion) {
2126
+ try {
2127
+ const segundos = tempos.length ? tempos[tempos.length - 1].ate + 2 : 20;
2128
+ /* O gerativo escolhe o GÊNERO pelo assunto (jazz para o explainer,
2129
+ funk para o fone, eletrônica para IA…), sorteia a faixa e não
2130
+ repete as últimas usadas — nada de "inspiring corporate". */
2131
+ let m = null;
2132
+ // A memória da trilha é a da variedade ('trilha'): antes era um arquivo à parte (trilhas-usadas.json).
2133
+ const usadas = variedade.usadas('trilha');
2134
+ const mus = estilo === 'gerativo' ? gerativo.musicaDe(roteiro) : null;
2135
+ /* A trilha do gerativo vem do Jamendo (Openverse), pelo GÊNERO do
2136
+ assunto, instrumental, sorteada e sem repetir as últimas — a
2137
+ ende.app fica de reserva ("parar de cair sempre na ende", 30/09). */
2138
+ if (mus) {
2139
+ const BUSCA = { jazz: 'jazz instrumental', 'lofi-chill-beats': 'lofi hip hop instrumental', electronica: 'electronic instrumental', funk: 'funk instrumental',
2140
+ 'dance-club': 'house instrumental', ambient: 'ambient instrumental', acoustic: 'acoustic guitar instrumental', cinematic: 'cinematic instrumental',
2141
+ classical: 'piano classical instrumental', 'soul-rnb': 'soul instrumental' };
2142
+ try {
2143
+ const b = await assets.procurarMusica(BUSCA[roteiro.genero || mus.genero] || ((roteiro.genero || mus.genero) + ' instrumental'), { quantas: 8, duracaoMin: Math.max(45, segundos + 10) });
2144
+ // Pelos pontos da variedade: a recente e a muito usada vão para o fim, não somem.
2145
+ const opcoes = variedade.ordenar((b.ok ? b.sons : []).filter((x) => !/vocal|voice|feat|ft\.|remix/i.test(x.titulo || '')), 'trilha');
2146
+ for (let k = 0; k < opcoes.length && !m; k++) {
2147
+ const item = opcoes[k];
2148
+ const d = await assets.baixar(item, { pasta: p.pasta, nome: 'trilha-' + (roteiro.genero || mus.genero) });
2149
+ if (!d.ok) continue;
2150
+ if (await temLetra(path.join(p.pasta, d.relativo))) { projeto.anotar(p.id, 'midia', `trilha com voz descartada: ${item.titulo}`); continue; }
2151
+ m = { src: path.join(p.pasta, d.relativo), credito: `Música: ${item.titulo} — ${item.autor || 'Jamendo'} (${item.licenca || 'CC'}, Jamendo)`, id: item.url, segundos: item.segundos };
2152
+ }
2153
+ } catch { /* cai na ende.app */ }
2154
+ }
2155
+ if (mus && m) {
2156
+ variedade.marcar('trilha', m.id);
2157
+ projeto.anotar(p.id, 'trilha', `gênero ${roteiro.genero || mus.genero} (Jamendo)`);
2158
+ } else if (mus) {
2159
+ m = await ende.provedor({ pasta: path.join(p.pasta, 'midia') }).gerar({ clima: roteiro.clima || 'energetico', segundos, genero: roteiro.genero || mus.genero, semente: mus.semente, evitar: usadas });
2160
+ const id = m && Number((/ende-(\d+)\.mp3$/.exec(m.src) || [])[1]);
2161
+ if (id) variedade.marcar('trilha', id);
2162
+ if (m) projeto.anotar(p.id, 'trilha', `gênero ${roteiro.genero || mus.genero}`);
2163
+ } else m = await ende.provedor({ pasta: path.join(p.pasta, 'midia') }).gerar({ clima: roteiro.clima || 'tecnologia', segundos });
2164
+ if (m) { trilha = path.relative(p.pasta, m.src).replace(/\\/g, '/'); projeto.anotar(p.id, 'trilha', m.credito); }
2165
+ } catch { /* cai na busca de sempre */ }
2166
+ }
2167
+ // Termo pelo clima e faixa sorteada sem repetir — o "inspiring corporate" fixo era a mesma música em todo vídeo.
2168
+ for (const termo of [args.trilha, ...variedade.termosTrilha(roteiro, estilo)].filter(Boolean)) {
2169
+ if (trilha) break;
2170
+ try {
2171
+ const b = await assets.procurarMusica(termo, { quantas: 10, duracaoMin: 45 });
2172
+ for (const item of variedade.ordenar(b.ok ? b.sons : [], 'trilha').slice(0, 3)) {
2173
+ const d = await assets.baixar(item, { pasta: p.pasta, nome: 'trilha' });
2174
+ if (d.ok) { trilha = d.relativo; variedade.marcar('trilha', item.url); projeto.anotar(p.id, 'trilha', `"${termo}": ${item.titulo}`); break; }
2175
+ }
2176
+ } catch { /* o próximo termo */ }
2177
+ }
2178
+ }
2179
+ if (estilo === 'impacto' && modo === 'video') {
2180
+ // Os emojis das palavras FALADAS também (a batida mostra a fala).
2181
+ const faladas = tempos.flatMap((t) => (t.palavras || []).map((w) => w.texto));
2182
+ for (const nome of new Set(faladas.map((w) => edicao.iconeDe(w)).filter(Boolean))) {
2183
+ if (iconesOk.has(nome)) continue;
2184
+ try { const r = await assets.icone(nome); if (r && r.ok) iconesOk.add(nome); } catch { /* sem */ }
2185
+ }
2186
+ const fotos = [
2187
+ ...acervo.fotos.map((f) => ({ src: f.src, tipo: 'imagem' })),
2188
+ ...(acervo.videos || []).map((v) => ({ src: v.src, tipo: 'video' })),
2189
+ ...Object.values(imagens),
2190
+ ];
2191
+ const r = impacto.montarImpacto({ roteiro, largura, altura, tempos, narracao, sons, trilha, fotos, iconesOk });
2192
+ if (r.ok) projeto.anotar(p.id, 'plano', `estilo impacto: ${r.resumo.cenas} batidas`);
2193
+ return r;
2194
+ }
2195
+ if (estilo === 'vox' && modo === 'video') {
2196
+ const r = vox.montarVox({ roteiro, largura, altura, tempos, narracao, sons, trilha, imagens });
2197
+ if (r.ok) projeto.anotar(p.id, 'plano', `estilo vox: ${r.resumo.cenas} cenas, ${r.resumo.segundos}s`);
2198
+ return r;
2199
+ }
2200
+ if ((estilo === 'marca' || estilo === 'lancamento') && modo === 'video') {
2201
+ /* As letras em vetor (a peça "vetor") pedem os pontos de verdade da
2202
+ fonte: glifos.js lê o .ttf. Sem rede, o vetor desenha o contorno do
2203
+ próprio texto, sem as alças. */
2204
+ const m = roteiro.marca || {};
2205
+ const nome = m.nome || (partes.find((pt) => pt.tipo === 'logo' || pt.tipo === 'abertura') || {}).titulo || '';
2206
+ const precisa = partes.some((pt) => pt.tipo === 'logo' || pt.visual === 'vetor');
2207
+ const g = precisa ? await glifos.palavra((partes.find((pt) => pt.tipo === 'logo') || {}).titulo || nome,
2208
+ { fonte: (m.fontes && m.fontes.titulo) || (estilo === 'marca' ? 'Plus Jakarta Sans' : 'Inter Tight') }) : null;
2209
+ const r = lancamento.montarLancamento({ roteiro, variante: estilo, largura, altura, tempos, narracao, sons, trilha, imagens, glifos: g });
2210
+ if (r.ok) projeto.anotar(p.id, 'plano', `estilo ${estilo}: ${r.resumo.cenas} cenas, ${r.resumo.segundos}s${precisa ? (g ? ', vetor com os pontos da fonte' : ', vetor sem os pontos (sem a fonte)') : ''}`);
2211
+ return r;
2212
+ }
2213
+ if (estilo === 'gerativo' && modo === 'video') {
2214
+ /* A música a -18 LUFS (a voz sai a -14): os volumes do plano partem
2215
+ daí — cheia no respiro, uns 9 dB abaixo quando a voz fala. */
2216
+ if (trilha && !/-n18\.mp3$/.test(trilha)) {
2217
+ const norm = path.join(p.pasta, 'midia', path.basename(trilha).replace(/\.[a-z0-9]+$/i, '') + '-n18.mp3');
2218
+ /* A introdução da faixa fica de fora (ela começa morna): corta de 12% em
2219
+ diante, com 0,4 s de entrada, no tamanho do vídeo. */
2220
+ let ini = 0;
2221
+ try { const md = await video.medir(path.join(p.pasta, trilha)); const tot = md.segundos || 0; const quer = (tempos.length ? tempos[tempos.length - 1].ate : 30) + 6; if (tot > quer + 8) ini = Math.min(tot * 0.12, tot - quer - 2); } catch { /* do começo */ }
2222
+ const c = fs.existsSync(norm) ? { ok: true } : await video.rodar(video.ffmpeg(), ['-y', ...(ini > 1 ? ['-ss', ini.toFixed(2)] : []), '-i', path.join(p.pasta, trilha),
2223
+ '-af', 'afade=t=in:st=0:d=0.4,loudnorm=I=-18:TP=-2:LRA=11', '-ar', '44100', norm], { timeout: 5 * 60000 });
2224
+ if (c.ok && fs.existsSync(norm)) trilha = path.relative(p.pasta, norm).replace(/\\/g, '/');
2225
+ }
2226
+ /* SEM ÍCONE NENHUM (14/10, a padaria: "sem ícones"): o modelo grátis não
2227
+ dá herói, e o gerativo de comida não tem forma abstrata — o vídeo
2228
+ saía só com texto. Na parte em que o modelo não disse nada (nem
2229
+ "nenhum"), o ícone 3D que É a coisa que a fala nomeia ("pão" → bread). */
2230
+ const autoHerois = [];
2231
+ for (const pt of partes) {
2232
+ if (!pt || pt.heroi != null || pt.icone != null) continue;
2233
+ const id = colecao.melhorIcone3d([pt.titulo, pt.destaque, pt.fala, pt.texto].filter(Boolean).join(' '), 80);
2234
+ if (id && !autoHerois.includes(id)) { pt.heroi = id; autoHerois.push(id); }
2235
+ }
2236
+ if (autoHerois.length) projeto.anotar(p.id, 'icones', `sem herói do modelo, a biblioteca achou: ${autoHerois.join(', ')}`);
2237
+ /* O herói que o roteiro pediu do Iconify ("mdi:bread-slice"): o desenho é
2238
+ baixado aqui (fica em midia/icones); o que não baixar, a batida fica sem. */
2239
+ const icones = {};
2240
+ for (const pt of partes) {
2241
+ const h = typeof (pt.heroi != null ? pt.heroi : pt.icone) === 'string' ? String(pt.heroi != null ? pt.heroi : pt.icone).trim() : '';
2242
+ if (/^(fluent3d|noto):/i.test(h) && !icones[h]) {
2243
+ // O herói da biblioteca: o PNG 3D ou o Lottie, baixado para o projeto.
2244
+ try {
2245
+ const r = await colecao.baixar(h, { pasta: p.pasta, largura, altura });
2246
+ if (r.ok) icones[h] = /^noto:/i.test(h) ? { lottie: r.src } : { png: r.src };
2247
+ else projeto.anotar(p.id, 'icones', `herói ${h} não baixou: ${r.error || '?'}`);
2248
+ } catch { /* fica sem */ }
2249
+ continue;
2250
+ }
2251
+ // O ícone do próprio site (estudio_site guardou os <svg> na marca).
2252
+ const doSite = h.match(/^site:(\d+)$/i);
2253
+ if (doSite) { const x = ((roteiro.marca || {}).iconesSite || [])[Number(doSite[1]) - 1]; if (x && x.svg) icones[h] = x.svg; continue; }
2254
+ if (!/^[a-z0-9-]+:[a-z0-9-]+$/i.test(h) || icones[h]) continue;
2255
+ try { const ic = await assets.icone(h, { pasta: p.pasta }); if (ic && ic.ok) icones[h] = ic.svg; else projeto.anotar(p.id, 'icones', `herói ${h} não baixou: ${(ic && ic.error) || '?'}`); } catch { /* fica sem */ }
2256
+ }
2257
+ const r = gerativo.montarGerativo({ roteiro, largura, altura, tempos, narracao, sons, trilha, icones });
2258
+ if (r.ok) {
2259
+ const feitos = sonsLeves.prepararReceitas(p.pasta, r.somReceitas);
2260
+ // Som que o ffmpeg não conseguiu fazer sai do plano (o vídeo não espera um arquivo que não existe).
2261
+ r.plano.audio.efeitos = r.plano.audio.efeitos.filter((e) => Object.values(feitos).includes(e.src));
2262
+ }
2263
+ if (r.ok) projeto.anotar(p.id, 'plano', `estilo gerativo: ${r.resumo.batidas} batidas (${r.resumo.composicoes.join(' → ')}), ${r.resumo.segundos}s, semente ${r.resumo.semente}`);
2264
+ if (r.ok) conferirAssinatura(p, r, roteiro.assinatura || 'gerativo');
2265
+ return r;
2266
+ }
2267
+ if (estilo === 'fluido' && modo === 'video') {
2268
+ /* A CARA de cada vídeo do fluido, por PROJETO (ajustar uma frase não
2269
+ troca): a semente (marcador, jeito das imagens) e a paleta, que a
2270
+ memória de variedade não repete do vídeo anterior (08/10: "sempre o
2271
+ mesmo azul"). A paleta ou o tema pedidos mandam. */
2272
+ if (roteiro.semente == null) {
2273
+ roteiro.semente = p.semente != null ? p.semente : Math.floor(Math.random() * 1e9);
2274
+ if (p.semente == null) projeto.salvar(p.id, { semente: roteiro.semente });
2275
+ }
2276
+ /* O modelo também vicia: pedia "noite" em todo vídeo (era a primeira da
2277
+ lista). A paleta dele vale, menos quando é uma das 2 últimas usadas —
2278
+ aí vem a menos usada do mesmo tema (escura ou clara). */
2279
+ if (!p.paletaFluido) {
2280
+ const P = fluido.PALETAS, nomes = Object.keys(P);
2281
+ const pedida = P[String(roteiro.paleta || '').toLowerCase()] ? String(roteiro.paleta).toLowerCase() : null;
2282
+ const recentes = variedade.usadas('paleta-fluido').slice(0, 2);
2283
+ const escuro = pedida ? P[pedida].escuro : /escuro|dark/i.test(roteiro.tema || '') ? true : /claro|light/i.test(roteiro.tema || '') ? false : null;
2284
+ let escolha = pedida && !recentes.includes(pedida) ? pedida : null;
2285
+ if (!escolha) escolha = variedade.sortear(nomes.filter((n) => escuro == null || P[n].escuro === escuro), 'paleta-fluido');
2286
+ else variedade.marcar('paleta-fluido', escolha);
2287
+ if (pedida && escolha !== pedida) projeto.anotar(p.id, 'visual', `paleta ${pedida} pedida, mas foi a de um dos últimos vídeos: ${escolha}`);
2288
+ projeto.salvar(p.id, { paletaFluido: escolha });
2289
+ p.paletaFluido = escolha;
2290
+ }
2291
+ roteiro.paleta = p.paletaFluido;
2292
+ // O trio de fontes, também por projeto e sem repetir os últimos vídeos (09/10, "vício em fontes").
2293
+ if (!p.fontesFluido) { p.fontesFluido = fluido.escolherFontes(roteiro.fontesFluido); projeto.salvar(p.id, { fontesFluido: p.fontesFluido }); }
2294
+ roteiro.fontesFluido = p.fontesFluido;
2295
+ /* As IMAGENS do fluido misto, só com imagem pedida: as partes com
2296
+ "busca", no máximo 1 em 3 e espalhadas (fluido.js decide o jeito). */
2297
+ const fotosFluido = {};
2298
+ if (!semImagem) {
2299
+ const comBusca = partes.map((pt, k) => (pt.busca || pt.src ? k : -1)).filter((k) => k >= 0 && (partes[k].tipo !== 'cta'));
2300
+ const teto = Math.max(1, Math.floor(partes.length / 3));
2301
+ const escolhidas = [];
2302
+ for (const k of comBusca) if (escolhidas.length < teto && !escolhidas.some((j) => Math.abs(j - k) < 2)) escolhidas.push(k);
2303
+ for (const k of escolhidas) {
2304
+ const pt = partes[k];
2305
+ // O acervo EDITORIAL (assets.procurarEditorial), não o banco de stock: sem foto que sirva, a parte fica sem imagem.
2306
+ const m = pt.src ? { src: pt.src } : await baixarEditorial(p, pt.busca);
2307
+ if (m && m.src) fotosFluido[k] = { src: m.src };
2308
+ }
2309
+ if (Object.keys(fotosFluido).length) projeto.anotar(p.id, 'midia', `fluido misto: imagem nas partes ${Object.keys(fotosFluido).map((k) => Number(k) + 1).join(', ')}`);
2310
+ }
2311
+ const r = fluido.montarFluido({ imagens: fotosFluido, roteiro: { ...roteiro, pedido: roteiro.pedido || pedidoTxt }, largura, altura, tempos, narracao, sons, trilha });
2312
+ if (r.ok) projeto.anotar(p.id, 'plano', `estilo fluido: ${r.resumo.batidas} batidas${r.resumo.imagens.length ? ` (imagens: ${r.resumo.imagens.join(', ')})` : ''}, paleta ${r.resumo.paleta}, ${r.resumo.segundos}s, batida atrasada no máximo ${r.resumo.atraso}s, palavra atrás da voz no máximo ${r.resumo.sincronia}s`);
2313
+ if (r.ok) conferirAssinatura(p, r, roteiro.assinatura || 'fluido');
2314
+ return r;
2315
+ }
2316
+ if (estilo === 'personagem' && modo === 'video') {
2317
+ const r = personagem.montarPersonagem({ roteiro: { ...roteiro, pedido: roteiro.pedido || pedidoTxt, voz: args.voz || roteiro.voz }, largura, altura, tempos, narracao, sons, trilha });
2318
+ if (r.ok) {
2319
+ /* O que não é peça do catálogo vira ícone 3D da biblioteca, em blocos
2320
+ (kit/mundo.jsx): "uma pizza que fala", "um violão na praia". Sem
2321
+ ícone, a peça sai da cena (e a coisa que fala vira o mascote). */
2322
+ const achados = {};
2323
+ for (const nome of mundo.iconesPendentes(r.partitura)) {
2324
+ const id = colecao.melhorIcone3d(nome, 40);
2325
+ if (!id) continue;
2326
+ const b = await colecao.baixar(id, { pasta: p.pasta, largura, altura }).catch(() => null);
2327
+ if (b && b.ok) achados[nome] = b.src;
2328
+ }
2329
+ mundo.aplicarIcones(r.partitura, achados);
2330
+ mundo.adicionarObjetos(r.partitura, objetosDoRoteiro(roteiro.objetos, p.pasta));
2331
+ const icones = Object.keys(achados);
2332
+ projeto.anotar(p.id, 'plano', `estilo personagem: ${r.resumo.elenco.join(' e ')}${r.resumo.figurantes.length ? ` (+ ${r.resumo.figurantes.join(', ')})` : ''} em ${r.resumo.lugares.join(' → ')}, ${r.resumo.planos} planos, ${r.resumo.segundos}s${icones.length ? `; em blocos: ${icones.join(', ')}` : ''}`);
2333
+ }
2334
+ return r;
2335
+ }
2336
+ if (estilo === 'motion' && modo === 'video') {
2337
+ const r = motion.montarMotion({ roteiro, largura, altura, tempos, narracao, sons, trilha, imagens });
2338
+ if (r.ok) projeto.anotar(p.id, 'plano', `estilo motion: ${r.resumo.segundos}s contínuos, ${r.resumo.partes} partes, ${r.resumo.fps} fps`);
2339
+ return r;
2340
+ }
2341
+ /* A composição (e os slides) só conhece os tipos antigos: as partes novas
2342
+ viram a mais parecida delas, e o roteiro do vídeo serve à página. */
2343
+ const PARECIDA = { logo: 'abertura', cores: 'lista', produto: 'titulo' };
2344
+ const paraComposicao = { ...roteiro, partes: partes.map((pt) => (PARECIDA[pt.tipo]
2345
+ ? { ...pt, tipo: PARECIDA[pt.tipo], itens: pt.itens || (pt.cores || []).map((c) => (typeof c === 'string' ? c : c.nome)) }
2346
+ : pt)) };
2347
+ return composicao.comporRoteiro({ roteiro: paraComposicao, modo, largura, altura, tempos, narracao, sons, trilha, imagens, iconesOk, fundos });
2348
+ }
2349
+
2350
+ /* Sem o tempo de cada palavra, cada trecho é repartido pelas palavras dele,
2351
+ proporcional ao tamanho de cada uma. */
2352
+ function repartirTrechos(trechos) {
2353
+ const out = [];
2354
+ for (const t of trechos) {
2355
+ const ws = String(t.texto || '').split(/\s+/).filter(Boolean);
2356
+ const letras = ws.reduce((n, w) => n + w.length, 0) || 1;
2357
+ let cur = t.de;
2358
+ for (const w of ws) {
2359
+ const d = (t.ate - t.de) * (w.length / letras);
2360
+ out.push({ de: cur, ate: cur + d, texto: w });
2361
+ cur += d;
2362
+ }
2363
+ }
2364
+ return out;
2365
+ }
2366
+
2367
+ /**
2368
+ * A transcrição com tempo — é ela que dá legenda sincronizada.
2369
+ *
2370
+ * Quem tem a chave é o servidor, e é assim de propósito (a API vem com o
2371
+ * produto). O áudio vai pequeno: mono, 16 kHz, 32 kbps.
2372
+ */
2373
+ async function transcrever(p, alvo, ctx) {
2374
+ const mp3 = path.join(p.pasta, 'midia', `audio-${Date.now().toString(36)}.mp3`);
2375
+ const ex = await video.extrairAudio(alvo, mp3);
2376
+ if (!ex.ok) return ex;
2377
+
2378
+ if (!ctx.api || !ctx.server) {
2379
+ return { ok: false, error: 'a transcrição precisa do servidor, e ele não foi passado para a ferramenta.' };
2380
+ }
2381
+ if (ex.bytes > 20 * 1024 * 1024) {
2382
+ return { ok: false, error: `o áudio ficou com ${(ex.bytes / 1048576).toFixed(1)} MB, acima do teto de 20 MB. `
2383
+ + 'Transcreva em pedaços: recorte o vídeo antes.' };
2384
+ }
2385
+
2386
+ try {
2387
+ const r = await ctx.api.requestTranscricao(ctx.server, {
2388
+ token: ctx.token,
2389
+ audio: fs.readFileSync(mp3).toString('base64'),
2390
+ nome: path.basename(mp3),
2391
+ idioma: 'pt',
2392
+ });
2393
+ try { fs.unlinkSync(mp3); } catch { /* fica, não faz mal */ }
2394
+ if (!r || r.ok === false) return { ok: false, error: (r && r.erro) || 'a transcrição falhou.' };
2395
+ projeto.anotar(p.id, 'transcricao', `${(r.trechos || []).length} trechos`);
2396
+ return {
2397
+ ok: true, texto: r.texto, trechos: r.trechos, palavras: r.palavras || [],
2398
+ comoUsar: 'cada trecho vira uma fala da legenda: {"de":…, "ate":…, "texto":…}. '
2399
+ + 'O estilo da legenda (fonte, cor, peso, posição, animação) é escolha sua — não há padrão.',
2400
+ };
2401
+ } catch (e) {
2402
+ return { ok: false, error: `a transcrição falhou: ${e.message}` };
2403
+ }
2404
+ }
2405
+
2406
+ // ── estudio_render ───────────────────────────────────────────────────────
2407
+
2408
+ /* O SEGUNDO MOTOR: HYPERFRAMES (heygen-com/hyperframes, Apache-2.0, 13/10:
2409
+ "trabalhar com o Remotion, mas também com o Hyperframes"). A IA escreve a
2410
+ composição em HTML (index.html com data-start/data-duration e GSAP, CSS ou
2411
+ three.js) numa pasta dela; aqui a pasta vai para o projeto, ganha a midia/
2412
+ do projeto (voz, trilha, sons do Estúdio), e o CLI renderiza num Chrome
2413
+ escondido — sem telemetria (HYPERFRAMES_NO_TELEMETRY). Depois, o mesmo do
2414
+ Remotion: volume de Reels, a conferência e o vídeo aberto. */
2415
+ const HYPERFRAMES = 'hyperframes@0.8.154';
2416
+ async function renderHyperframes(p, args, ctx = {}) {
2417
+ const pedido = String(args.html || args.composicao || 'hyperframes').trim();
2418
+ const origem = [path.resolve(p.pasta, pedido), args.__pasta && path.resolve(args.__pasta, pedido), path.isAbsolute(pedido) && pedido]
2419
+ .find((d) => d && fs.existsSync(path.join(d, 'index.html')));
2420
+ if (!origem) return { ok: false, error: `não achei ${pedido}/index.html — escreva a composição do Hyperframes numa pasta com index.html e passe html:"<pasta>".` };
2421
+ const destino = path.join(p.pasta, 'hyperframes');
2422
+ if (path.resolve(origem) !== path.resolve(destino)) {
2423
+ fs.rmSync(destino, { recursive: true, force: true });
2424
+ fs.cpSync(origem, destino, { recursive: true });
2425
+ }
2426
+ const midia = path.join(destino, 'midia');
2427
+ if (!fs.existsSync(midia) && fs.existsSync(path.join(p.pasta, 'midia'))) fs.symlinkSync(path.join(p.pasta, 'midia'), midia);
2428
+ const saida = path.join(p.pasta, 'saida', `${projeto.apelidar(p.titulo)}.mp4`);
2429
+ fs.mkdirSync(path.dirname(saida), { recursive: true });
2430
+ (ctx.aoFalar || (() => {}))('renderizando no Hyperframes');
2431
+ const npx = process.platform === 'win32' ? 'npx.cmd' : 'npx';
2432
+ const r = await new Promise((resolve) => {
2433
+ const { spawn } = require('child_process');
2434
+ const proc = spawn(npx, ['--yes', HYPERFRAMES, 'render', destino, '-o', saida, '--quiet'], { env: { ...process.env, HYPERFRAMES_NO_TELEMETRY: '1', DO_NOT_TRACK: '1' } });
2435
+ let erro = '';
2436
+ proc.stderr.on('data', (d) => { erro += d; });
2437
+ proc.stdout.on('data', (d) => { erro += d; });
2438
+ const relogio = setTimeout(() => { try { proc.kill(); } catch { /* já saiu */ } }, (Number(args.minutos) || 20) * 60000);
2439
+ proc.on('close', (code) => { clearTimeout(relogio); resolve({ ok: code === 0 && fs.existsSync(saida), erro }); });
2440
+ proc.on('error', (e) => { clearTimeout(relogio); resolve({ ok: false, erro: e.message }); });
2441
+ });
2442
+ if (!r.ok) return { ok: false, error: `o Hyperframes não renderizou: ${r.erro.slice(-400)}`, comoResolver: 'precisa de Node 22+ e do ffmpeg; rode `npx hyperframes doctor` na pasta.' };
2443
+ const med = await video.medir(saida);
2444
+ if (med.ok && med.temAudio) {
2445
+ const tmp = saida.replace(/\.mp4$/, '.norm.mp4');
2446
+ const ln = await video.rodar(video.ffmpeg(), ['-y', '-i', saida, '-c:v', 'copy', '-af', 'loudnorm=I=-14:TP=-1.2:LRA=10', '-c:a', 'aac', '-b:a', '256k', tmp], { timeout: 15 * 60000 });
2447
+ if (ln.ok && fs.existsSync(tmp)) fs.renameSync(tmp, saida); else { try { fs.unlinkSync(tmp); } catch { /* não havia */ } }
2448
+ }
2449
+ const bytes = fs.statSync(saida).size;
2450
+ projeto.salvar(p.id, { renders: [...(p.renders || []), { quando: new Date().toISOString(), arquivo: saida, bytes, motor: 'hyperframes' }] });
2451
+ projeto.anotar(p.id, 'render', `hyperframes: ${(bytes / 1048576).toFixed(1)} MB, ${(med.segundos || 0).toFixed(1)}s`);
2452
+ const conf = await conferencia.conferir(saida, { duracao: med.segundos || 0 });
2453
+ if (conf.ok && conf.avisos.length) projeto.anotar(p.id, 'conferencia', conf.avisos.join('; '));
2454
+ if (ctx.abrir) { try { ctx.abrir(saida); } catch { /* o caminho está na resposta */ } }
2455
+ return { ok: true, motor: 'hyperframes', arquivo: saida, bytes, segundos: med.segundos,
2456
+ conferencia: conf.ok ? { som: conf.som, parados: conf.parados, avisos: conf.avisos, olho: conf.olho } : undefined,
2457
+ aviso: 'ABERTO para o usuário assistir. Chame finish dizendo o que foi feito' + (conf.ok && conf.avisos.length ? ' — e cite os avisos da conferência.' : '.') };
2458
+ }
2459
+
2460
+ async function ferramentaRender(args, ctx = {}) {
2461
+ const p = projetoOuRecente(args.id);
2462
+ if (!p) return semProjeto(args.id);
2463
+ if (args.id == null || String(args.id).trim() === '') args = { ...args, id: p.id };
2464
+ if (String(args.motor || '').toLowerCase() === 'hyperframes' || args.html) return renderHyperframes(p, args, ctx);
2465
+ const pl = projeto.lerPlano(args.id);
2466
+ if (!pl) return { ok: false, error: 'não há plano neste projeto.' };
2467
+
2468
+ const conferida = plano.conferir(pl, { pasta: p.pasta });
2469
+ if (!conferida.ok) {
2470
+ return { ok: false, error: 'o plano tem problemas — conserte antes de renderizar.',
2471
+ problemas: conferida.problemas.slice(0, 12) };
2472
+ }
2473
+
2474
+ /* A REVISÃO (revisor.js): o plano roda; agora, ele está bom? Conserta a
2475
+ receita (transição repetida, câmera sem respiro, som duplicado) e
2476
+ devolve o resto como aviso para quem fez o plano. */
2477
+ const revisao = revisor.revisar(pl, { semImagem: referencias.semImagem() });
2478
+ if (revisao.consertos.length) projeto.anotar(args.id, 'revisao', revisao.consertos.join('; '));
2479
+ if (revisao.avisos.length) projeto.anotar(args.id, 'revisao', 'avisos: ' + revisao.avisos.join('; '));
2480
+
2481
+ /* A ÁREA SEGURA E O RESPIRO (margem.js): nada a menos de 6%/7% da borda,
2482
+ nada colado em nada. É conta, não pedido: o elemento que o modelo pôs
2483
+ encostado entra, o texto largo encolhe, o colado se afasta. */
2484
+ const guarda = margem.guardarPlano(pl);
2485
+ if (guarda.consertos.length) projeto.anotar(args.id, 'margem', guarda.consertos.slice(0, 12).join('; '));
2486
+
2487
+ // Os ícones vêm ANTES do render: um render que busca ícone na internet
2488
+ // falha no meio, depois de vinte minutos.
2489
+ const { mapa, faltaram } = await assets.iconesDoPlano(pl, p.pasta);
2490
+
2491
+ /* A MÚSICA NO CORTE (batida.js): a faixa começa no ponto em que as
2492
+ batidas caem nos cortes do plano, e o corte de impacto num acento. Só
2493
+ quando ninguém disse o início (audio.trilha.inicio). */
2494
+ const tr = pl.audio && pl.audio.trilha;
2495
+ if (tr && !(typeof tr === 'object' && tr.inicio != null) && !(p.formato === 'slides' || p.formato === 'arte' || args.paginas)) {
2496
+ try {
2497
+ const src = path.join(p.pasta, tr.src || tr);
2498
+ const analise = await batida.analisar(src, { ffmpeg: video.ffmpeg() || 'ffmpeg' });
2499
+ if (analise && analise.batidas.length) {
2500
+ const duracao = (pl.cenas || []).reduce((n, c) => n + (Number(c.duracao) || 0), 0);
2501
+ const r = batida.melhorInicio(batida.cortesDoPlano(pl), analise, { maximo: Math.min(20, analise.segundos - duracao - 0.5) });
2502
+ pl.audio.trilha = { ...(typeof tr === 'object' ? tr : { src: tr }), inicio: r.inicio };
2503
+ projeto.anotar(args.id, 'trilha', `${analise.bpm} BPM; a faixa entra em ${r.inicio}s e ${r.alinhados} de ${r.total} cortes caem na batida`);
2504
+ }
2505
+ } catch { /* sem análise, a faixa entra do começo */ }
2506
+ }
2507
+
2508
+ const montado = remotion.montar({ pasta: p.pasta, titulo: p.titulo, plano: pl, icones: mapa });
2509
+
2510
+ if (args.somenteProjeto) {
2511
+ return { ok: true, projeto: montado.raiz, faltaram,
2512
+ aviso: 'o projeto Remotion está escrito, mas nada foi renderizado.' };
2513
+ }
2514
+
2515
+ /* SLIDES E ARTE são o mesmo plano, parados no tempo: cada cena vira uma
2516
+ página. O Studio antigo tinha seis ferramentas com seis formatos de
2517
+ documento; cinco delas eram "coisas posicionadas num retângulo", que é
2518
+ o que uma cena já é. */
2519
+ const parado = p.formato === 'slides' || p.formato === 'arte' || args.paginas;
2520
+ if (parado) {
2521
+ const pasta = path.join(p.pasta, 'saida', 'paginas');
2522
+ const r = await slides.renderizarPaginas({
2523
+ raiz: montado.raiz, destino: pasta, plano: pl, aoFalar: ctx.aoFalar || (() => {}),
2524
+ });
2525
+ if (!r.ok) return { ...r, faltaram };
2526
+
2527
+ const pdf = path.join(p.pasta, 'saida', `${projeto.apelidar(p.titulo)}.pdf`);
2528
+ const junto = slides.montarPDF(r.paginas, pdf);
2529
+ if (!junto.ok) return { ...junto, imagens: r.paginas };
2530
+
2531
+ projeto.salvar(args.id, { renders: [...(p.renders || []), { quando: new Date().toISOString(), arquivo: pdf, bytes: junto.bytes }] });
2532
+ projeto.anotar(args.id, 'render', `${junto.paginas} páginas em PDF`);
2533
+ if (ctx.abrir) { try { ctx.abrir(pdf); } catch { /* o caminho está na resposta */ } }
2534
+ return {
2535
+ ok: true, arquivo: pdf, paginas: junto.paginas, bytes: junto.bytes,
2536
+ imagens: r.paginas,
2537
+ faltaram: faltaram.length ? faltaram : undefined,
2538
+ aviso: 'ABERTO para o usuário ver. Chame finish dizendo o que foi feito.',
2539
+ };
2540
+ }
2541
+
2542
+ const saida = path.join(p.pasta, 'saida', `${projeto.apelidar(p.titulo)}.mp4`);
2543
+ const falar = ctx.aoFalar || (() => {});
2544
+ const r = await remotion.renderizar({
2545
+ raiz: montado.raiz, saida,
2546
+ minutos: Number(args.minutos) || 30,
2547
+ aoFalar: falar,
2548
+ });
2549
+ if (!r.ok) return { ...r, faltaram };
2550
+
2551
+ /* O VOLUME FINAL: a mistura (voz, música, efeitos, depoimento) sai no
2552
+ padrão de Reels e YouTube, -14 LUFS. Medido em 25/09: o vídeo pronto
2553
+ saía com -23,6 dB de média. A imagem não é recodificada. */
2554
+ if (pl.audio && fs.existsSync(saida)) {
2555
+ const tmp = saida.replace(/\.mp4$/, '.norm.mp4');
2556
+ const ln = await video.rodar(video.ffmpeg(), ['-y', '-i', saida, '-c:v', 'copy', '-af', 'loudnorm=I=-14:TP=-1.2:LRA=10',
2557
+ '-c:a', 'aac', '-b:a', '256k', tmp], { timeout: 15 * 60000 });
2558
+ if (ln.ok && fs.existsSync(tmp)) fs.renameSync(tmp, saida);
2559
+ else { try { fs.unlinkSync(tmp); } catch { /* não havia */ } }
2560
+ }
2561
+
2562
+ const bytes = fs.existsSync(saida) ? fs.statSync(saida).size : 0;
2563
+ projeto.salvar(args.id, { renders: [...(p.renders || []), { quando: new Date().toISOString(), arquivo: saida, bytes }] });
2564
+ projeto.anotar(args.id, 'render', `${(bytes / 1048576).toFixed(1)} MB, ${conferida.duracao}s`);
2565
+
2566
+ /* A CONFERÊNCIA (conferencia.js): o arquivo que saiu, medido. Som fora do
2567
+ alvo e imagem parada viram aviso; quem decide se refaz é o agente. */
2568
+ const conf = fs.existsSync(saida) ? await conferencia.conferir(saida, { duracao: conferida.duracao }) : { ok: false };
2569
+ const avisosDoArquivo = conf.ok ? conf.avisos : [];
2570
+ if (avisosDoArquivo.length) projeto.anotar(args.id, 'conferencia', avisosDoArquivo.join('; '));
2571
+
2572
+ // O vídeo pronto abre. É a única coisa que abre — a interface morreu, e
2573
+ // o que a pessoa pediu foi o vídeo.
2574
+ if (ctx.abrir) { try { ctx.abrir(saida); } catch { /* o caminho está na resposta */ } }
2575
+
2576
+ return {
2577
+ ok: true, arquivo: saida, bytes, segundos: conferida.duracao,
2578
+ faltaram: faltaram.length ? faltaram : undefined,
2579
+ revisao: revisao.consertos.length || revisao.avisos.length ? { consertado: revisao.consertos, avisos: revisao.avisos } : undefined,
2580
+ conferencia: conf.ok ? { som: conf.som, parados: conf.parados, avisos: conf.avisos, olho: conf.olho } : undefined,
2581
+ aviso: 'ABERTO para o usuário assistir. Chame finish dizendo o que foi feito'
2582
+ + (revisao.avisos.length || avisosDoArquivo.length ? ' — e cite os avisos da revisão e da conferência que valem um novo plano.' : '.'),
2583
+ };
2584
+ }
2585
+
2586
+ // ── estudio_site ─────────────────────────────────────────────────────────
2587
+
2588
+ /* A PALETA INTEIRA do site, não só a primeira cor. O fundo é o neutro
2589
+ escuro que o site mais usa (#121218 na Paris Group); o destaque é a cor da
2590
+ marca que mais aparece sobre ele (o laranja, não o azul escuro que some); o
2591
+ apoio é a seguinte. A fonte serifada, quando existe, vai para citação. */
2592
+ function paletaDoSite(r) {
2593
+ const hexRgb = (h) => { const n = parseInt(String(h).slice(1).padEnd(6, '0').slice(0, 6), 16); return [n >> 16, (n >> 8) & 255, n & 255]; };
2594
+ const luz = (h) => { const [a, b, c] = hexRgb(h); return (0.299 * a + 0.587 * b + 0.114 * c) / 255; };
2595
+ const sat = (h) => { const v = hexRgb(h); return (Math.max(...v) - Math.min(...v)) / 255; };
2596
+ const neutras = ((r.cores && (r.cores.neutras || r.cores.fundo)) || []).map((x) => x.cor || x).filter((c) => /^#/.test(c));
2597
+ const fundo = neutras.find((c) => luz(c) < 0.15 && luz(c) > 0.02) || neutras.find((c) => luz(c) < 0.2) || undefined;
2598
+ const base = fundo || '#121218';
2599
+ const marca = ((r.cores && r.cores.marca) || []).map((x) => x.cor).filter(Boolean);
2600
+ const nota = (c) => sat(c) * 1.2 + Math.abs(luz(c) - luz(base));
2601
+ const ordenadas = [...marca].sort((a, b) => nota(b) - nota(a));
2602
+ const destaque = ordenadas[0];
2603
+ // O apoio é OUTRA cor, de outro matiz: dois laranjas não fazem paleta.
2604
+ const matiz = (h) => { const [a, b, c] = hexRgb(h).map((v) => v / 255); const mx = Math.max(a, b, c), mn = Math.min(a, b, c), d = mx - mn;
2605
+ if (!d) return 0; const x = mx === a ? ((b - c) / d) % 6 : mx === b ? (c - a) / d + 2 : (a - b) / d + 4; return (x * 60 + 360) % 360; };
2606
+ const longe = (a, b) => { const d = Math.abs(matiz(a) - matiz(b)); return Math.min(d, 360 - d) > 60; };
2607
+ const apoio = ordenadas.find((c) => c !== destaque && longe(c, destaque) && sat(c) > 0.3) || ordenadas[1];
2608
+ const fontes = ((r.fontes && r.fontes.declaradas) || []).map((x) => x.fonte).filter((f) => !/mono|menlo|courier|system|arial|helvetica/i.test(f));
2609
+ return {
2610
+ cores: { ...(fundo ? { fundo } : {}), ...(destaque ? { destaque } : {}), ...(apoio ? { apoio } : {}) },
2611
+ fontes: {
2612
+ ...(fontes[0] ? { titulo: fontes.find((f) => !/serif/i.test(f) || /sans/i.test(f)) || fontes[0], texto: fontes.find((f) => !/serif/i.test(f) || /sans/i.test(f)) || fontes[0] } : {}),
2613
+ ...(fontes.find((f) => /serif/i.test(f) && !/sans/i.test(f)) ? { serifa: fontes.find((f) => /serif/i.test(f) && !/sans/i.test(f)) } : {}),
2614
+ },
2615
+ };
2616
+ }
2617
+
2618
+ async function ferramentaSite(args) {
2619
+ let alvo = String(args.url || args.site || '').trim();
2620
+
2621
+ /* Só o NOME da empresa também serve: "faz um vídeo para a Paris Group"
2622
+ não traz link nenhum, e sem este caminho o agente inventaria as cores
2623
+ da marca — erro que aparece pronto no vídeo entregue. */
2624
+ if (!alvo && (args.marca || args.nome || args.empresa)) {
2625
+ const achado = await identidade.acharSite(args.marca || args.nome || args.empresa);
2626
+ if (!achado.ok) return achado;
2627
+ alvo = achado.url;
2628
+ }
2629
+ if (!alvo) return { ok: false, error: 'mande a url do site, ou o nome da empresa em "marca".' };
2630
+ // "tailwindcss.com" é endereço para gente e não é URL para o `new URL`.
2631
+ // Sem isto, o domínio sem esquema voltava "não é um endereço" — e quem
2632
+ // digita o domínio pelado é justamente quem já sabe qual é o site.
2633
+ if (!/^https?:\/\//i.test(alvo)) alvo = 'https://' + alvo;
2634
+
2635
+ const r = await identidade.analisar(alvo);
2636
+ if (r.ok) r.achadoPor = args.url || args.site ? 'url dada' : 'nome da empresa';
2637
+
2638
+ /* A LOGO. Cor e fonte saem do CSS; a logo não — ela mora num <img> do
2639
+ cabeçalho, num apple-touch-icon ou no og:image. Sem baixar aqui, o
2640
+ agente montava a peça de marca com o nome em texto e o usuário
2641
+ perguntava por que a logo dele não apareceu.
2642
+
2643
+ Só baixa quando há projeto: arquivo de mídia solto no disco, fora de
2644
+ uma pasta de projeto, é lixo que ninguém recolhe. */
2645
+ const html = r.html;
2646
+ delete r.html; // o HTML cru não vai para o modelo
2647
+ if (r.ok) {
2648
+ const marcaLida = paletaDoSite(r);
2649
+ ultimoSite = { url: r.url, html, quando: Date.now(), marca: marcaLida };
2650
+ }
2651
+ if (r.ok && args.id && args.logo !== false) {
2652
+ const p = projeto.ler(args.id);
2653
+ if (p) {
2654
+ /* O nome que o USUÁRIO disse vem primeiro. `r.marca` sai do
2655
+ <title>, e título de página é frase: o nubank.com.br devolve
2656
+ "Nu | About us", de onde sobra "about" — que não identifica
2657
+ marca nenhuma e faz o desempate premiar a imagem errada. */
2658
+ const daMarca = args.marca || args.nome || args.empresa || r.marca || r.titulo || 'marca';
2659
+ r.logo = await identidade.pegarLogo(html, r.url, { pasta: p.pasta, nome: daMarca });
2660
+ if (r.logo.ok) projeto.anotar(args.id, 'midia', `logo de ${r.marca || r.url}: ${r.logo.src} (${r.logo.achadaEm})`);
2661
+ }
2662
+ }
2663
+
2664
+ if (r.ok && args.id) {
2665
+ projeto.anotar(args.id, 'referencia', `leu ${r.url}: ${(r.cores.marca[0] || {}).cor || 'sem cor'} · ${(r.fontes.declaradas[0] || {}).fonte || 'sem fonte'}`);
2666
+ }
2667
+
2668
+ /* O ACERVO DA MARCA: as fotos e os vídeos reais do site, e o texto das
2669
+ páginas que combinam com o pedido (lib/plugin/estudio/acervo-site.js). As
2670
+ fotos ficam guardadas no projeto e o roteiro as usa sozinho; os fatos
2671
+ voltam para o modelo escrever o roteiro com dado de verdade. */
2672
+ if (r.ok && args.id && args.acervo !== false) {
2673
+ const p = projeto.ler(args.id);
2674
+ if (p) {
2675
+ try {
2676
+ const a = await acervoSite.colher({
2677
+ url: r.url, pedido: args.pedido || p.pedido || '', pasta: p.pasta, htmlInicial: html,
2678
+ buscar: identidade.buscar, baixar: assets.baixar,
2679
+ });
2680
+ const marca = { ...ultimoSite.marca, ...(r.logo && r.logo.ok ? { logo: r.logo.src } : {}) };
2681
+ /* O GRADIENTE da marca sai da própria logo, quando ela é SVG com
2682
+ gradiente (a da Paris Group vai de #2E81ED a #9567DB). */
2683
+ try {
2684
+ if (marca.logo && /\.svg$/i.test(marca.logo)) {
2685
+ const svg = fs.readFileSync(path.join(p.pasta, marca.logo), 'utf8');
2686
+ const stops = [...new Set((svg.match(/stop-color=["'](#[0-9a-f]{3,6})["']/gi) || []).map((x) => x.match(/#[0-9a-f]{3,6}/i)[0].toUpperCase()))];
2687
+ if (stops.length >= 2) {
2688
+ marca.gradiente = stops.slice(0, 2);
2689
+ // A logo manda na identidade: o destaque é a cor dela, não a do CSS.
2690
+ marca.cores = { ...(marca.cores || {}), destaque: stops[1], apoio: stops[0] };
2691
+ }
2692
+ }
2693
+ } catch { /* sem gradiente */ }
2694
+ /* Os ícones do próprio site (os <svg> dos cartões): viram "site:N" no roteiro. */
2695
+ const icSite = marcaLib.iconesDoSite(html);
2696
+ if (icSite.length) { marca.iconesSite = icSite; r.icones = icSite.map((x, i) => `site:${i + 1}${x.nome ? ' (' + x.nome + ')' : ''}`); }
2697
+ projeto.salvar(args.id, { acervo: { fotos: a.fotos, videos: a.videos, fatos: a.fatos, site: r.url }, marca });
2698
+ projeto.anotar(args.id, 'midia', `acervo do site: ${a.fotos.length} fotos, ${a.videos.length} vídeos, ${a.paginas.length} páginas lidas`);
2699
+ let orcamento = 4200;
2700
+ r.fatos = a.fatos.map((f) => {
2701
+ const texto = f.texto.slice(0, Math.max(0, Math.min(1400, orcamento)));
2702
+ orcamento -= texto.length;
2703
+ return { pagina: f.pagina, texto };
2704
+ }).filter((f) => f.texto);
2705
+ r.acervo = { fotos: a.fotos.length, videos: a.videos.length,
2706
+ exemplos: a.fotos.slice(0, 6).map((f) => f.alt).filter(Boolean) };
2707
+ r.comoUsar = 'Escreva o roteiro com os FATOS acima (datas, local, números, frases da marca) — nada '
2708
+ + 'inventado. As fotos e os vídeos reais da marca entram SOZINHOS no vídeo: não precisa pôr '
2709
+ + '"busca" nas partes de imagem (use tipo "imagem" com só o título). Use as cores, a fonte e '
2710
+ + 'a logo em roteiro.marca (objeto: {cores: {fundo, destaque, tinta}, fontes: {titulo, texto}}).'
2711
+ + (r.icones ? ' Os ícones do site estão em "icones": ponha icone:"site:N" na parte em que o assunto dele aparece.' : '');
2712
+ } catch (e) {
2713
+ r.acervo = { erro: e.message };
2714
+ }
2715
+ }
2716
+ }
2717
+ return r;
2718
+ }
2719
+
2720
+ module.exports = { proporcaoDoPedido,
2721
+ vazamentoNoComeco, variarIcones, objetosDoRoteiro,
2722
+ ferramentaProjeto, ferramentaPlano, ferramentaMidia, ferramentaAE, ferramentaMotion, ferramentaEditar, ferramentaNarrar, ferramentaCriar,
2723
+ ferramentaVideo, ferramentaRender, ferramentaSite,
2724
+ projeto, plano, remotion, assets, video, identidade, slides, python, rodarPython, alinharPartes, prepararRoteiro, roteiroValido, juntarVozes,
2725
+ };