@hiai-gg/hiai-opencode 0.2.1 → 0.2.2

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 (477) hide show
  1. package/.env.example +4 -0
  2. package/AGENTS.md +34 -38
  3. package/ARCHITECTURE.md +4 -3
  4. package/LICENSE.md +14 -0
  5. package/README.md +52 -21
  6. package/config/hiai-opencode.schema.json +11 -13
  7. package/dist/agents/{bob.d.ts → bob/claude.d.ts} +6 -2
  8. package/dist/agents/bob/core.d.ts +6 -0
  9. package/dist/agents/bob/gpt.d.ts +11 -0
  10. package/dist/agents/bob/index.d.ts +3 -0
  11. package/dist/agents/coder/core.d.ts +4 -0
  12. package/dist/agents/coder/gpt.d.ts +1 -4
  13. package/dist/agents/coder/index.d.ts +1 -0
  14. package/dist/agents/manager/agent.d.ts +1 -1
  15. package/dist/agents/manager/default-prompt-sections.d.ts +3 -3
  16. package/dist/agents/manager/guard-integration.d.ts +1 -0
  17. package/dist/agents/prompt-library/index.d.ts +0 -1
  18. package/dist/agents/prompt-library/shared-execution.d.ts +9 -0
  19. package/dist/agents/strategist/behavioral-summary.d.ts +1 -1
  20. package/dist/agents/strategist/identity-constraints.d.ts +1 -1
  21. package/dist/agents/strategist/plan-generation.d.ts +1 -1
  22. package/dist/agents/types.d.ts +2 -1
  23. package/dist/config/defaults.d.ts +1 -0
  24. package/dist/config/platform-schema.d.ts +26 -26
  25. package/dist/config/schema/agent-names.d.ts +6 -6
  26. package/dist/config/schema/agent-overrides.d.ts +0 -128
  27. package/dist/config/schema/hiai-opencode-config.d.ts +0 -128
  28. package/dist/config/types.d.ts +2 -2
  29. package/dist/features/background-agent/manager-notifier.d.ts +46 -0
  30. package/dist/features/background-agent/manager-types.d.ts +40 -0
  31. package/dist/features/background-agent/manager.d.ts +3 -19
  32. package/dist/features/background-agent/polling-manager.d.ts +51 -0
  33. package/dist/features/boulder-state/storage.d.ts +1 -0
  34. package/dist/features/builtin-commands/templates/loop.d.ts +2 -0
  35. package/dist/features/builtin-commands/templates/start-work.d.ts +1 -1
  36. package/dist/features/builtin-skills/skills/interview-me.d.ts +2 -0
  37. package/dist/features/builtin-skills/skills/planning-and-task-breakdown.d.ts +2 -0
  38. package/dist/hooks/reasoning-content-cache/hook.d.ts +11 -0
  39. package/dist/hooks/reasoning-content-cache/index.d.ts +1 -0
  40. package/dist/hooks/session-recovery/checkpoint.d.ts +48 -0
  41. package/dist/hooks/session-recovery/enhanced-hook.d.ts +30 -0
  42. package/dist/hooks/session-recovery/state-backup.d.ts +76 -0
  43. package/dist/hooks/shared/compaction-in-progress.d.ts +4 -0
  44. package/dist/hooks/start-work/git-operations.d.ts +47 -0
  45. package/dist/hooks/token-budget.d.ts +30 -0
  46. package/dist/index.js +1185 -1078
  47. package/dist/mcp/rate-limiter.d.ts +68 -0
  48. package/dist/plugin/chat-message.d.ts +8 -0
  49. package/dist/plugin/command-execute-before.d.ts +1 -1
  50. package/dist/plugin/event-handlers/message-updated.d.ts +2 -0
  51. package/dist/plugin/event-handlers/session-error.d.ts +2 -0
  52. package/dist/plugin/event-handlers/session-status.d.ts +2 -0
  53. package/dist/plugin/event-handlers/types.d.ts +62 -0
  54. package/dist/plugin/event-handlers/utils.d.ts +11 -0
  55. package/dist/plugin/event.d.ts +1 -1
  56. package/dist/shared/data-path.d.ts +1 -1
  57. package/dist/shared/errors.d.ts +70 -0
  58. package/dist/shared/extract-session-id.d.ts +8 -0
  59. package/dist/shared/git-worktree/get-git-state-summary.d.ts +14 -0
  60. package/dist/shared/index.d.ts +67 -68
  61. package/dist/shared/internal-initiator-marker.d.ts +1 -1
  62. package/dist/shared/logger.d.ts +5 -1
  63. package/dist/shared/reasoning-content-cache.d.ts +68 -0
  64. package/dist/shared/safe-create-hook.d.ts +4 -4
  65. package/dist/tools/call-hiai-agent/constants.d.ts +2 -2
  66. package/dist/tools/delegate-task/sub-agent.d.ts +1 -1
  67. package/dist/tools/look-at/constants.d.ts +1 -1
  68. package/docs/architecture/bob-manager-architecture.md +244 -0
  69. package/docs/hiai-opencode/adr/ADR-001-agent-identity-section-injection.md +66 -0
  70. package/docs/hiai-opencode/adr/ADR-002-anti-loop-guard-priority.md +63 -0
  71. package/docs/hiai-opencode/adr/ADR-003-compaction-mechanism.md +71 -0
  72. package/docs/hiai-opencode/adr/ADR-004-session-recovery.md +76 -0
  73. package/docs/hiai-opencode/api.md +305 -0
  74. package/docs/hiai-opencode/hooks-architecture.md +225 -0
  75. package/docs/hiai-opencode/migration.md +209 -0
  76. package/docs/skill-discovery.md +288 -0
  77. package/package.json +1 -1
  78. package/skills/agent-browser/SKILL.md +193 -0
  79. package/skills/apple-hig/SKILL.md +43 -0
  80. package/skills/article-magazine/SKILL.md +46 -0
  81. package/skills/article-magazine/example.html +81 -0
  82. package/skills/article-magazine/example.md +38 -0
  83. package/skills/canvas-design/SKILL.md +45 -0
  84. package/skills/design-templates/audio-jingle/SKILL.md +132 -0
  85. package/skills/design-templates/audio-jingle/example.html +128 -0
  86. package/skills/design-templates/blog-post/SKILL.md +80 -0
  87. package/skills/design-templates/blog-post/example.html +80 -0
  88. package/skills/design-templates/clinical-case-report/SKILL.md +209 -0
  89. package/skills/design-templates/clinical-case-report/example.html +698 -0
  90. package/skills/design-templates/clinical-case-report/examples/example-stemi.html +698 -0
  91. package/skills/design-templates/clinical-case-report/references/case-formats.md +94 -0
  92. package/skills/design-templates/clinical-case-report/references/checklist.md +41 -0
  93. package/skills/design-templates/critique/SKILL.md +258 -0
  94. package/skills/design-templates/critique/example.html +671 -0
  95. package/skills/design-templates/dashboard/SKILL.md +76 -0
  96. package/skills/design-templates/dashboard/example.html +118 -0
  97. package/skills/design-templates/dating-web/SKILL.md +92 -0
  98. package/skills/design-templates/dating-web/example.html +265 -0
  99. package/skills/design-templates/dcf-valuation/SKILL.md +140 -0
  100. package/skills/design-templates/dcf-valuation/references/sector-wacc.md +42 -0
  101. package/skills/design-templates/digital-eguide/SKILL.md +94 -0
  102. package/skills/design-templates/digital-eguide/example.html +204 -0
  103. package/skills/design-templates/docs-page/SKILL.md +80 -0
  104. package/skills/design-templates/docs-page/example.html +122 -0
  105. package/skills/design-templates/email-marketing/SKILL.md +84 -0
  106. package/skills/design-templates/email-marketing/example.html +159 -0
  107. package/skills/design-templates/eng-runbook/SKILL.md +51 -0
  108. package/skills/design-templates/eng-runbook/example.html +250 -0
  109. package/skills/design-templates/finance-report/SKILL.md +61 -0
  110. package/skills/design-templates/finance-report/example.html +242 -0
  111. package/skills/design-templates/flowai-live-dashboard-template/SKILL.md +87 -0
  112. package/skills/design-templates/flowai-live-dashboard-template/assets/template.html +387 -0
  113. package/skills/design-templates/flowai-live-dashboard-template/example.html +13 -0
  114. package/skills/design-templates/flowai-live-dashboard-template/references/checklist.md +35 -0
  115. package/skills/design-templates/gamified-app/SKILL.md +108 -0
  116. package/skills/design-templates/gamified-app/example.html +292 -0
  117. package/skills/design-templates/github-dashboard/SKILL.md +130 -0
  118. package/skills/design-templates/github-dashboard/example.html +473 -0
  119. package/skills/design-templates/github-dashboard/references/README.md +10 -0
  120. package/skills/design-templates/github-dashboard/references/artifact-example.json +15 -0
  121. package/skills/design-templates/github-dashboard/references/example-data.json +138 -0
  122. package/skills/design-templates/github-dashboard/references/provenance-example.json +92 -0
  123. package/skills/design-templates/github-dashboard/references/template.html +473 -0
  124. package/skills/design-templates/guizang-ppt/LICENSE +21 -0
  125. package/skills/design-templates/guizang-ppt/README.en.md +119 -0
  126. package/skills/design-templates/guizang-ppt/README.md +120 -0
  127. package/skills/design-templates/guizang-ppt/README.pt-BR.md +121 -0
  128. package/skills/design-templates/guizang-ppt/SKILL.md +313 -0
  129. package/skills/design-templates/guizang-ppt/assets/example-slides.html +318 -0
  130. package/skills/design-templates/guizang-ppt/assets/template.html +647 -0
  131. package/skills/design-templates/guizang-ppt/references/checklist.md +265 -0
  132. package/skills/design-templates/guizang-ppt/references/components.md +363 -0
  133. package/skills/design-templates/guizang-ppt/references/layouts.md +630 -0
  134. package/skills/design-templates/guizang-ppt/references/styles.md +195 -0
  135. package/skills/design-templates/guizang-ppt/references/themes.md +122 -0
  136. package/skills/design-templates/hr-onboarding/SKILL.md +52 -0
  137. package/skills/design-templates/hr-onboarding/example.html +219 -0
  138. package/skills/design-templates/html-ppt/.clawscan-allow +12 -0
  139. package/skills/design-templates/html-ppt/LICENSE +21 -0
  140. package/skills/design-templates/html-ppt/README.md +234 -0
  141. package/skills/design-templates/html-ppt/README.pt-BR.md +239 -0
  142. package/skills/design-templates/html-ppt/README.zh-CN.md +238 -0
  143. package/skills/design-templates/html-ppt/SKILL.md +250 -0
  144. package/skills/design-templates/html-ppt/assets/animations/animations.css +138 -0
  145. package/skills/design-templates/html-ppt/assets/animations/fx/_util.js +63 -0
  146. package/skills/design-templates/html-ppt/assets/animations/fx/chain-react.js +41 -0
  147. package/skills/design-templates/html-ppt/assets/animations/fx/confetti-cannon.js +49 -0
  148. package/skills/design-templates/html-ppt/assets/animations/fx/constellation.js +44 -0
  149. package/skills/design-templates/html-ppt/assets/animations/fx/counter-explosion.js +58 -0
  150. package/skills/design-templates/html-ppt/assets/animations/fx/data-stream.js +45 -0
  151. package/skills/design-templates/html-ppt/assets/animations/fx/firework.js +51 -0
  152. package/skills/design-templates/html-ppt/assets/animations/fx/galaxy-swirl.js +33 -0
  153. package/skills/design-templates/html-ppt/assets/animations/fx/gradient-blob.js +39 -0
  154. package/skills/design-templates/html-ppt/assets/animations/fx/knowledge-graph.js +69 -0
  155. package/skills/design-templates/html-ppt/assets/animations/fx/letter-explode.js +50 -0
  156. package/skills/design-templates/html-ppt/assets/animations/fx/magnetic-field.js +40 -0
  157. package/skills/design-templates/html-ppt/assets/animations/fx/matrix-rain.js +33 -0
  158. package/skills/design-templates/html-ppt/assets/animations/fx/neural-net.js +75 -0
  159. package/skills/design-templates/html-ppt/assets/animations/fx/orbit-ring.js +38 -0
  160. package/skills/design-templates/html-ppt/assets/animations/fx/particle-burst.js +42 -0
  161. package/skills/design-templates/html-ppt/assets/animations/fx/shockwave.js +39 -0
  162. package/skills/design-templates/html-ppt/assets/animations/fx/sparkle-trail.js +62 -0
  163. package/skills/design-templates/html-ppt/assets/animations/fx/starfield.js +30 -0
  164. package/skills/design-templates/html-ppt/assets/animations/fx/typewriter-multi.js +51 -0
  165. package/skills/design-templates/html-ppt/assets/animations/fx/word-cascade.js +47 -0
  166. package/skills/design-templates/html-ppt/assets/animations/fx-runtime.js +99 -0
  167. package/skills/design-templates/html-ppt/assets/base.css +150 -0
  168. package/skills/design-templates/html-ppt/assets/fonts.css +9 -0
  169. package/skills/design-templates/html-ppt/assets/runtime.js +960 -0
  170. package/skills/design-templates/html-ppt/assets/themes/academic-paper.css +23 -0
  171. package/skills/design-templates/html-ppt/assets/themes/arctic-cool.css +14 -0
  172. package/skills/design-templates/html-ppt/assets/themes/aurora.css +20 -0
  173. package/skills/design-templates/html-ppt/assets/themes/bauhaus.css +16 -0
  174. package/skills/design-templates/html-ppt/assets/themes/blueprint.css +19 -0
  175. package/skills/design-templates/html-ppt/assets/themes/catppuccin-latte.css +14 -0
  176. package/skills/design-templates/html-ppt/assets/themes/catppuccin-mocha.css +14 -0
  177. package/skills/design-templates/html-ppt/assets/themes/corporate-clean.css +19 -0
  178. package/skills/design-templates/html-ppt/assets/themes/cyberpunk-neon.css +23 -0
  179. package/skills/design-templates/html-ppt/assets/themes/dracula.css +14 -0
  180. package/skills/design-templates/html-ppt/assets/themes/editorial-serif.css +18 -0
  181. package/skills/design-templates/html-ppt/assets/themes/engineering-whiteprint.css +26 -0
  182. package/skills/design-templates/html-ppt/assets/themes/glassmorphism.css +21 -0
  183. package/skills/design-templates/html-ppt/assets/themes/gruvbox-dark.css +14 -0
  184. package/skills/design-templates/html-ppt/assets/themes/japanese-minimal.css +21 -0
  185. package/skills/design-templates/html-ppt/assets/themes/magazine-bold.css +21 -0
  186. package/skills/design-templates/html-ppt/assets/themes/memphis-pop.css +20 -0
  187. package/skills/design-templates/html-ppt/assets/themes/midcentury.css +19 -0
  188. package/skills/design-templates/html-ppt/assets/themes/minimal-white.css +16 -0
  189. package/skills/design-templates/html-ppt/assets/themes/neo-brutalism.css +17 -0
  190. package/skills/design-templates/html-ppt/assets/themes/news-broadcast.css +20 -0
  191. package/skills/design-templates/html-ppt/assets/themes/nord.css +14 -0
  192. package/skills/design-templates/html-ppt/assets/themes/pitch-deck-vc.css +21 -0
  193. package/skills/design-templates/html-ppt/assets/themes/rainbow-gradient.css +16 -0
  194. package/skills/design-templates/html-ppt/assets/themes/retro-tv.css +22 -0
  195. package/skills/design-templates/html-ppt/assets/themes/rose-pine.css +14 -0
  196. package/skills/design-templates/html-ppt/assets/themes/sharp-mono.css +17 -0
  197. package/skills/design-templates/html-ppt/assets/themes/soft-pastel.css +14 -0
  198. package/skills/design-templates/html-ppt/assets/themes/solarized-light.css +14 -0
  199. package/skills/design-templates/html-ppt/assets/themes/sunset-warm.css +14 -0
  200. package/skills/design-templates/html-ppt/assets/themes/swiss-grid.css +17 -0
  201. package/skills/design-templates/html-ppt/assets/themes/terminal-green.css +18 -0
  202. package/skills/design-templates/html-ppt/assets/themes/tokyo-night.css +14 -0
  203. package/skills/design-templates/html-ppt/assets/themes/vaporwave.css +21 -0
  204. package/skills/design-templates/html-ppt/assets/themes/xiaohongshu-white.css +16 -0
  205. package/skills/design-templates/html-ppt/assets/themes/y2k-chrome.css +20 -0
  206. package/skills/design-templates/html-ppt/docs/readme/_theme-cell.html +56 -0
  207. package/skills/design-templates/html-ppt/docs/readme/animations.png +0 -0
  208. package/skills/design-templates/html-ppt/docs/readme/hero.gif +0 -0
  209. package/skills/design-templates/html-ppt/docs/readme/layouts-live.gif +0 -0
  210. package/skills/design-templates/html-ppt/docs/readme/layouts.png +0 -0
  211. package/skills/design-templates/html-ppt/docs/readme/montage-animations.html +61 -0
  212. package/skills/design-templates/html-ppt/docs/readme/montage-layouts.html +72 -0
  213. package/skills/design-templates/html-ppt/docs/readme/montage-templates.html +72 -0
  214. package/skills/design-templates/html-ppt/docs/readme/montage-themes.html +38 -0
  215. package/skills/design-templates/html-ppt/docs/readme/presenter-mode.png +0 -0
  216. package/skills/design-templates/html-ppt/docs/readme/templates.png +0 -0
  217. package/skills/design-templates/html-ppt/docs/readme/themes.png +0 -0
  218. package/skills/design-templates/html-ppt/examples/demo-deck/index.html +161 -0
  219. package/skills/design-templates/html-ppt/references/animations.md +147 -0
  220. package/skills/design-templates/html-ppt/references/authoring-guide.md +141 -0
  221. package/skills/design-templates/html-ppt/references/full-decks.md +98 -0
  222. package/skills/design-templates/html-ppt/references/layouts.md +103 -0
  223. package/skills/design-templates/html-ppt/references/presenter-mode.md +240 -0
  224. package/skills/design-templates/html-ppt/references/themes.md +107 -0
  225. package/skills/design-templates/html-ppt/scripts/new-deck.sh +46 -0
  226. package/skills/design-templates/html-ppt/scripts/render.sh +71 -0
  227. package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_01.png +0 -0
  228. package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_02.png +0 -0
  229. package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_03.png +0 -0
  230. package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_04.png +0 -0
  231. package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_05.png +0 -0
  232. package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_06.png +0 -0
  233. package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_07.png +0 -0
  234. package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_08.png +0 -0
  235. package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_09.png +0 -0
  236. package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_10.png +0 -0
  237. package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_11.png +0 -0
  238. package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_12.png +0 -0
  239. package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_13.png +0 -0
  240. package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_14.png +0 -0
  241. package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_15.png +0 -0
  242. package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_16.png +0 -0
  243. package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_17.png +0 -0
  244. package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_18.png +0 -0
  245. package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_19.png +0 -0
  246. package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_20.png +0 -0
  247. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_01.png +0 -0
  248. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_02.png +0 -0
  249. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_03.png +0 -0
  250. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_04.png +0 -0
  251. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_05.png +0 -0
  252. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_06.png +0 -0
  253. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_07.png +0 -0
  254. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_08.png +0 -0
  255. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_09.png +0 -0
  256. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_10.png +0 -0
  257. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_11.png +0 -0
  258. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_12.png +0 -0
  259. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_13.png +0 -0
  260. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_14.png +0 -0
  261. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_15.png +0 -0
  262. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_16.png +0 -0
  263. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_17.png +0 -0
  264. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_18.png +0 -0
  265. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_19.png +0 -0
  266. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_20.png +0 -0
  267. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_21.png +0 -0
  268. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_22.png +0 -0
  269. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_23.png +0 -0
  270. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_24.png +0 -0
  271. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_25.png +0 -0
  272. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_26.png +0 -0
  273. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_27.png +0 -0
  274. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_28.png +0 -0
  275. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_29.png +0 -0
  276. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_30.png +0 -0
  277. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_31.png +0 -0
  278. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_32.png +0 -0
  279. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_33.png +0 -0
  280. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_34.png +0 -0
  281. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_35.png +0 -0
  282. package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_36.png +0 -0
  283. package/skills/design-templates/html-ppt/templates/animation-showcase.html +172 -0
  284. package/skills/design-templates/html-ppt/templates/deck.html +69 -0
  285. package/skills/design-templates/html-ppt/templates/full-decks/course-module/README.md +8 -0
  286. package/skills/design-templates/html-ppt/templates/full-decks/course-module/index.html +189 -0
  287. package/skills/design-templates/html-ppt/templates/full-decks/course-module/style.css +46 -0
  288. package/skills/design-templates/html-ppt/templates/full-decks/dir-key-nav-minimal/README.md +11 -0
  289. package/skills/design-templates/html-ppt/templates/full-decks/dir-key-nav-minimal/index.html +138 -0
  290. package/skills/design-templates/html-ppt/templates/full-decks/dir-key-nav-minimal/style.css +60 -0
  291. package/skills/design-templates/html-ppt/templates/full-decks/graphify-dark-graph/README.md +11 -0
  292. package/skills/design-templates/html-ppt/templates/full-decks/graphify-dark-graph/index.html +180 -0
  293. package/skills/design-templates/html-ppt/templates/full-decks/graphify-dark-graph/style.css +54 -0
  294. package/skills/design-templates/html-ppt/templates/full-decks/hermes-cyber-terminal/README.md +11 -0
  295. package/skills/design-templates/html-ppt/templates/full-decks/hermes-cyber-terminal/index.html +199 -0
  296. package/skills/design-templates/html-ppt/templates/full-decks/hermes-cyber-terminal/style.css +55 -0
  297. package/skills/design-templates/html-ppt/templates/full-decks/knowledge-arch-blueprint/README.md +11 -0
  298. package/skills/design-templates/html-ppt/templates/full-decks/knowledge-arch-blueprint/index.html +190 -0
  299. package/skills/design-templates/html-ppt/templates/full-decks/knowledge-arch-blueprint/style.css +49 -0
  300. package/skills/design-templates/html-ppt/templates/full-decks/obsidian-claude-gradient/README.md +11 -0
  301. package/skills/design-templates/html-ppt/templates/full-decks/obsidian-claude-gradient/index.html +144 -0
  302. package/skills/design-templates/html-ppt/templates/full-decks/obsidian-claude-gradient/style.css +59 -0
  303. package/skills/design-templates/html-ppt/templates/full-decks/pitch-deck/README.md +9 -0
  304. package/skills/design-templates/html-ppt/templates/full-decks/pitch-deck/index.html +148 -0
  305. package/skills/design-templates/html-ppt/templates/full-decks/pitch-deck/style.css +40 -0
  306. package/skills/design-templates/html-ppt/templates/full-decks/presenter-mode-reveal/README.md +102 -0
  307. package/skills/design-templates/html-ppt/templates/full-decks/presenter-mode-reveal/index.html +187 -0
  308. package/skills/design-templates/html-ppt/templates/full-decks/presenter-mode-reveal/style.css +216 -0
  309. package/skills/design-templates/html-ppt/templates/full-decks/product-launch/README.md +8 -0
  310. package/skills/design-templates/html-ppt/templates/full-decks/product-launch/index.html +121 -0
  311. package/skills/design-templates/html-ppt/templates/full-decks/product-launch/style.css +39 -0
  312. package/skills/design-templates/html-ppt/templates/full-decks/tech-sharing/README.md +8 -0
  313. package/skills/design-templates/html-ppt/templates/full-decks/tech-sharing/index.html +156 -0
  314. package/skills/design-templates/html-ppt/templates/full-decks/tech-sharing/style.css +49 -0
  315. package/skills/design-templates/html-ppt/templates/full-decks/testing-safety-alert/README.md +11 -0
  316. package/skills/design-templates/html-ppt/templates/full-decks/testing-safety-alert/index.html +183 -0
  317. package/skills/design-templates/html-ppt/templates/full-decks/testing-safety-alert/style.css +62 -0
  318. package/skills/design-templates/html-ppt/templates/full-decks/weekly-report/README.md +8 -0
  319. package/skills/design-templates/html-ppt/templates/full-decks/weekly-report/index.html +127 -0
  320. package/skills/design-templates/html-ppt/templates/full-decks/weekly-report/style.css +55 -0
  321. package/skills/design-templates/html-ppt/templates/full-decks/xhs-pastel-card/README.md +11 -0
  322. package/skills/design-templates/html-ppt/templates/full-decks/xhs-pastel-card/index.html +147 -0
  323. package/skills/design-templates/html-ppt/templates/full-decks/xhs-pastel-card/style.css +66 -0
  324. package/skills/design-templates/html-ppt/templates/full-decks/xhs-post/README.md +9 -0
  325. package/skills/design-templates/html-ppt/templates/full-decks/xhs-post/index.html +133 -0
  326. package/skills/design-templates/html-ppt/templates/full-decks/xhs-post/style.css +47 -0
  327. package/skills/design-templates/html-ppt/templates/full-decks/xhs-white-editorial/README.md +11 -0
  328. package/skills/design-templates/html-ppt/templates/full-decks/xhs-white-editorial/index.html +187 -0
  329. package/skills/design-templates/html-ppt/templates/full-decks/xhs-white-editorial/style.css +63 -0
  330. package/skills/design-templates/html-ppt/templates/full-decks-index.html +82 -0
  331. package/skills/design-templates/html-ppt/templates/layout-showcase.html +47 -0
  332. package/skills/design-templates/html-ppt/templates/single-page/arch-diagram.html +46 -0
  333. package/skills/design-templates/html-ppt/templates/single-page/big-quote.html +18 -0
  334. package/skills/design-templates/html-ppt/templates/single-page/bullets.html +19 -0
  335. package/skills/design-templates/html-ppt/templates/single-page/chart-bar.html +30 -0
  336. package/skills/design-templates/html-ppt/templates/single-page/chart-line.html +35 -0
  337. package/skills/design-templates/html-ppt/templates/single-page/chart-pie.html +36 -0
  338. package/skills/design-templates/html-ppt/templates/single-page/chart-radar.html +31 -0
  339. package/skills/design-templates/html-ppt/templates/single-page/code.html +33 -0
  340. package/skills/design-templates/html-ppt/templates/single-page/comparison.html +47 -0
  341. package/skills/design-templates/html-ppt/templates/single-page/cover.html +32 -0
  342. package/skills/design-templates/html-ppt/templates/single-page/cta.html +27 -0
  343. package/skills/design-templates/html-ppt/templates/single-page/diff.html +35 -0
  344. package/skills/design-templates/html-ppt/templates/single-page/flow-diagram.html +33 -0
  345. package/skills/design-templates/html-ppt/templates/single-page/gantt.html +29 -0
  346. package/skills/design-templates/html-ppt/templates/single-page/image-grid.html +34 -0
  347. package/skills/design-templates/html-ppt/templates/single-page/image-hero.html +33 -0
  348. package/skills/design-templates/html-ppt/templates/single-page/kpi-grid.html +19 -0
  349. package/skills/design-templates/html-ppt/templates/single-page/mindmap.html +38 -0
  350. package/skills/design-templates/html-ppt/templates/single-page/process-steps.html +27 -0
  351. package/skills/design-templates/html-ppt/templates/single-page/pros-cons.html +31 -0
  352. package/skills/design-templates/html-ppt/templates/single-page/roadmap.html +46 -0
  353. package/skills/design-templates/html-ppt/templates/single-page/section-divider.html +17 -0
  354. package/skills/design-templates/html-ppt/templates/single-page/stat-highlight.html +17 -0
  355. package/skills/design-templates/html-ppt/templates/single-page/table.html +33 -0
  356. package/skills/design-templates/html-ppt/templates/single-page/terminal.html +35 -0
  357. package/skills/design-templates/html-ppt/templates/single-page/thanks.html +21 -0
  358. package/skills/design-templates/html-ppt/templates/single-page/three-column.html +18 -0
  359. package/skills/design-templates/html-ppt/templates/single-page/timeline.html +32 -0
  360. package/skills/design-templates/html-ppt/templates/single-page/toc.html +26 -0
  361. package/skills/design-templates/html-ppt/templates/single-page/todo-checklist.html +33 -0
  362. package/skills/design-templates/html-ppt/templates/single-page/two-column.html +39 -0
  363. package/skills/design-templates/html-ppt/templates/theme-showcase.html +151 -0
  364. package/skills/design-templates/html-ppt-course-module/SKILL.md +78 -0
  365. package/skills/design-templates/html-ppt-course-module/example.html +542 -0
  366. package/skills/design-templates/html-ppt-dir-key-nav-minimal/SKILL.md +77 -0
  367. package/skills/design-templates/html-ppt-dir-key-nav-minimal/example.html +366 -0
  368. package/skills/design-templates/html-ppt-graphify-dark-graph/SKILL.md +77 -0
  369. package/skills/design-templates/html-ppt-graphify-dark-graph/example.html +402 -0
  370. package/skills/design-templates/html-ppt-hermes-cyber-terminal/SKILL.md +77 -0
  371. package/skills/design-templates/html-ppt-hermes-cyber-terminal/example.html +422 -0
  372. package/skills/design-templates/html-ppt-knowledge-arch-blueprint/SKILL.md +77 -0
  373. package/skills/design-templates/html-ppt-knowledge-arch-blueprint/example.html +407 -0
  374. package/skills/design-templates/html-ppt-obsidian-claude-gradient/SKILL.md +77 -0
  375. package/skills/design-templates/html-ppt-obsidian-claude-gradient/example.html +371 -0
  376. package/skills/design-templates/html-ppt-pitch-deck/SKILL.md +78 -0
  377. package/skills/design-templates/html-ppt-pitch-deck/example.html +495 -0
  378. package/skills/design-templates/html-ppt-presenter-mode-reveal/SKILL.md +78 -0
  379. package/skills/design-templates/html-ppt-presenter-mode-reveal/example.html +725 -0
  380. package/skills/design-templates/html-ppt-product-launch/SKILL.md +77 -0
  381. package/skills/design-templates/html-ppt-product-launch/example.html +467 -0
  382. package/skills/design-templates/html-ppt-taste-brutalist/SKILL.md +70 -0
  383. package/skills/design-templates/html-ppt-taste-brutalist/example.html +774 -0
  384. package/skills/design-templates/html-ppt-taste-editorial/SKILL.md +62 -0
  385. package/skills/design-templates/html-ppt-taste-editorial/example.html +689 -0
  386. package/skills/design-templates/html-ppt-tech-sharing/SKILL.md +77 -0
  387. package/skills/design-templates/html-ppt-tech-sharing/example.html +512 -0
  388. package/skills/design-templates/html-ppt-testing-safety-alert/SKILL.md +78 -0
  389. package/skills/design-templates/html-ppt-testing-safety-alert/example.html +413 -0
  390. package/skills/design-templates/html-ppt-weekly-report/SKILL.md +77 -0
  391. package/skills/design-templates/html-ppt-weekly-report/example.html +489 -0
  392. package/skills/design-templates/html-ppt-xhs-pastel-card/SKILL.md +78 -0
  393. package/skills/design-templates/html-ppt-xhs-pastel-card/example.html +381 -0
  394. package/skills/design-templates/html-ppt-xhs-post/SKILL.md +78 -0
  395. package/skills/design-templates/html-ppt-xhs-post/example.html +487 -0
  396. package/skills/design-templates/html-ppt-xhs-white-editorial/SKILL.md +77 -0
  397. package/skills/design-templates/html-ppt-xhs-white-editorial/example.html +418 -0
  398. package/skills/design-templates/html-ppt-zhangzara-8-bit-orbit/LICENSE +21 -0
  399. package/skills/design-templates/html-ppt-zhangzara-8-bit-orbit/SKILL.md +93 -0
  400. package/skills/design-templates/html-ppt-zhangzara-8-bit-orbit/example.html +1640 -0
  401. package/skills/design-templates/html-ppt-zhangzara-8-bit-orbit/template.json +48 -0
  402. package/skills/design-templates/html-ppt-zhangzara-biennale-yellow/LICENSE +21 -0
  403. package/skills/design-templates/html-ppt-zhangzara-biennale-yellow/SKILL.md +93 -0
  404. package/skills/design-templates/html-ppt-zhangzara-biennale-yellow/example.html +833 -0
  405. package/skills/design-templates/html-ppt-zhangzara-biennale-yellow/template.json +49 -0
  406. package/skills/design-templates/html-ppt-zhangzara-block-frame/LICENSE +21 -0
  407. package/skills/design-templates/html-ppt-zhangzara-block-frame/SKILL.md +93 -0
  408. package/skills/design-templates/html-ppt-zhangzara-block-frame/example.html +1453 -0
  409. package/skills/design-templates/html-ppt-zhangzara-block-frame/template.json +47 -0
  410. package/skills/design-templates/html-ppt-zhangzara-blue-professional/LICENSE +21 -0
  411. package/skills/design-templates/html-ppt-zhangzara-blue-professional/SKILL.md +93 -0
  412. package/skills/design-templates/html-ppt-zhangzara-blue-professional/example.html +1423 -0
  413. package/skills/design-templates/html-ppt-zhangzara-blue-professional/template.json +44 -0
  414. package/skills/design-templates/html-ppt-zhangzara-bold-poster/LICENSE +21 -0
  415. package/skills/design-templates/html-ppt-zhangzara-bold-poster/SKILL.md +93 -0
  416. package/skills/design-templates/html-ppt-zhangzara-bold-poster/example.html +876 -0
  417. package/skills/design-templates/html-ppt-zhangzara-bold-poster/template.json +45 -0
  418. package/skills/design-templates/html-ppt-zhangzara-broadside/LICENSE +21 -0
  419. package/skills/design-templates/html-ppt-zhangzara-broadside/SKILL.md +92 -0
  420. package/skills/design-templates/html-ppt-zhangzara-broadside/example.html +2144 -0
  421. package/skills/design-templates/html-ppt-zhangzara-broadside/template.json +49 -0
  422. package/skills/design-templates/html-ppt-zhangzara-capsule/LICENSE +21 -0
  423. package/skills/design-templates/html-ppt-zhangzara-capsule/SKILL.md +92 -0
  424. package/skills/design-templates/html-ppt-zhangzara-capsule/example.html +1413 -0
  425. package/skills/design-templates/html-ppt-zhangzara-capsule/template.json +51 -0
  426. package/skills/design-templates/html-ppt-zhangzara-cartesian/LICENSE +21 -0
  427. package/skills/design-templates/html-ppt-zhangzara-cartesian/SKILL.md +92 -0
  428. package/skills/design-templates/html-ppt-zhangzara-cartesian/example.html +1136 -0
  429. package/skills/design-templates/html-ppt-zhangzara-cartesian/template.json +47 -0
  430. package/skills/design-templates/html-ppt-zhangzara-cobalt-grid/LICENSE +21 -0
  431. package/skills/design-templates/html-ppt-zhangzara-cobalt-grid/SKILL.md +93 -0
  432. package/skills/design-templates/html-ppt-zhangzara-cobalt-grid/example.html +1205 -0
  433. package/skills/design-templates/html-ppt-zhangzara-cobalt-grid/template.json +49 -0
  434. package/skills/design-templates/html-ppt-zhangzara-coral/LICENSE +21 -0
  435. package/skills/design-templates/html-ppt-zhangzara-coral/SKILL.md +92 -0
  436. package/skills/design-templates/html-ppt-zhangzara-coral/example.html +1487 -0
  437. package/skills/design-templates/html-ppt-zhangzara-coral/template.json +45 -0
  438. package/skills/design-templates/html-ppt-zhangzara-creative-mode/LICENSE +21 -0
  439. package/skills/design-templates/html-ppt-zhangzara-creative-mode/SKILL.md +99 -0
  440. package/skills/design-templates/html-ppt-zhangzara-creative-mode/assets/deck-stage.js +619 -0
  441. package/skills/design-templates/html-ppt-zhangzara-creative-mode/example.html +636 -0
  442. package/skills/design-templates/html-ppt-zhangzara-creative-mode/template.json +47 -0
  443. package/skills/design-templates/html-ppt-zhangzara-daisy-days/LICENSE +21 -0
  444. package/skills/design-templates/html-ppt-zhangzara-daisy-days/SKILL.md +93 -0
  445. package/skills/design-templates/html-ppt-zhangzara-daisy-days/example.html +469 -0
  446. package/skills/design-templates/html-ppt-zhangzara-daisy-days/template.json +54 -0
  447. package/skills/design-templates/html-ppt-zhangzara-editorial-tri-tone/LICENSE +21 -0
  448. package/skills/design-templates/html-ppt-zhangzara-editorial-tri-tone/SKILL.md +98 -0
  449. package/skills/design-templates/html-ppt-zhangzara-editorial-tri-tone/assets/deck-stage.js +619 -0
  450. package/skills/design-templates/html-ppt-zhangzara-editorial-tri-tone/example.html +737 -0
  451. package/skills/design-templates/html-ppt-zhangzara-editorial-tri-tone/template.json +44 -0
  452. package/skills/design-templates/html-ppt-zhangzara-grove/LICENSE +21 -0
  453. package/skills/design-templates/html-ppt-zhangzara-grove/SKILL.md +92 -0
  454. package/skills/design-templates/html-ppt-zhangzara-grove/example.html +1676 -0
  455. package/skills/design-templates/html-ppt-zhangzara-grove/template.json +51 -0
  456. package/skills/figma-code-connect-components/SKILL.md +42 -0
  457. package/skills/figma-create-design-system-rules/SKILL.md +42 -0
  458. package/skills/figma-create-new-file/SKILL.md +41 -0
  459. package/skills/figma-generate-design/SKILL.md +42 -0
  460. package/skills/figma-generate-library/SKILL.md +42 -0
  461. package/skills/figma-implement-design/SKILL.md +42 -0
  462. package/skills/figma-use/SKILL.md +42 -0
  463. package/skills/full-page-screenshot/SKILL.md +42 -0
  464. package/skills/interview-me/SKILL.md +64 -0
  465. package/skills/planning-and-task-breakdown/SKILL.md +52 -0
  466. package/skills/sora/SKILL.md +43 -0
  467. package/skills/theme-factory/SKILL.md +43 -0
  468. package/skills/web-design-guidelines/SKILL.md +42 -0
  469. package/dist/agents/prompt-library/orchestration.d.ts +0 -4
  470. package/skills/brainstorming/SKILL.md +0 -164
  471. package/skills/brainstorming/scripts/frame-template.html +0 -214
  472. package/skills/brainstorming/scripts/helper.js +0 -88
  473. package/skills/brainstorming/scripts/server.cjs +0 -354
  474. package/skills/brainstorming/scripts/start-server.sh +0 -148
  475. package/skills/brainstorming/scripts/stop-server.sh +0 -56
  476. package/skills/brainstorming/spec-document-reviewer-prompt.md +0 -49
  477. package/skills/brainstorming/visual-companion.md +0 -287
@@ -0,0 +1,1640 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>8-BIT ORBIT | Pixel Art Presentation Template</title>
7
+ <link rel="preconnect" href="https://fonts.googleapis.com">
8
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
+ <link href="https://fonts.googleapis.com/css2?family=Chakra+Petch:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400&family=Space+Mono:wght@400;700&family=Tektur:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
10
+ <style>
11
+ :root {
12
+ --neon-pink: #F0A6CA;
13
+ --neon-cyan: #5EDCF4;
14
+ --neon-yellow: #F4D03F;
15
+ --deep-navy: #0F1B3D;
16
+ --dark-void: #0A0E27;
17
+ --soft-lavender: #E2D5F2;
18
+ --pixel-size: 4px;
19
+ --font-display: 'Tektur', cursive;
20
+ --font-body: 'Chakra Petch', sans-serif;
21
+ --font-mono: 'Space Mono', monospace;
22
+ }
23
+
24
+ * { margin: 0; padding: 0; box-sizing: border-box; }
25
+
26
+ html, body {
27
+ width: 100%;
28
+ height: 100%;
29
+ overflow: hidden;
30
+ font-family: var(--font-body);
31
+ color: var(--dark-void);
32
+ background: var(--dark-void);
33
+ }
34
+
35
+ /* Scroll behavior for slide navigation */
36
+ .deck {
37
+ width: 100%;
38
+ height: 100vh;
39
+ overflow: hidden;
40
+ position: relative;
41
+ }
42
+
43
+ .slides-container {
44
+ width: 100%;
45
+ height: 100%;
46
+ transition: transform 0.8s cubic-bezier(0.22, 1, 0.36, 1);
47
+ }
48
+
49
+ .slide {
50
+ width: 100%;
51
+ height: 100vh;
52
+ min-height: 100vh;
53
+ position: relative;
54
+ overflow: hidden;
55
+ display: flex;
56
+ flex-direction: column;
57
+ justify-content: center;
58
+ align-items: center;
59
+ padding: 3vh 4vw;
60
+ }
61
+
62
+ /* === GLOBAL ATMOSPHERIC OVERLAYS === */
63
+
64
+ /* Scanlines */
65
+ .scanlines::after {
66
+ content: "";
67
+ position: absolute;
68
+ inset: 0;
69
+ background: repeating-linear-gradient(
70
+ 0deg,
71
+ transparent 0px,
72
+ transparent 2px,
73
+ rgba(10, 14, 39, 0.04) 2px,
74
+ rgba(10, 14, 39, 0.04) 4px
75
+ );
76
+ pointer-events: none;
77
+ z-index: 50;
78
+ mix-blend-mode: multiply;
79
+ }
80
+
81
+ /* Grain / Noise */
82
+ .grain::before {
83
+ content: "";
84
+ position: absolute;
85
+ inset: 0;
86
+ background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
87
+ opacity: 0.035;
88
+ pointer-events: none;
89
+ z-index: 49;
90
+ }
91
+
92
+ /* CRT vignette glow */
93
+ .crt-glow::after {
94
+ content: "";
95
+ position: absolute;
96
+ inset: 0;
97
+ background: radial-gradient(ellipse at center, transparent 50%, rgba(10, 14, 39, 0.25) 100%);
98
+ pointer-events: none;
99
+ z-index: 51;
100
+ }
101
+
102
+ /* Pixel grid background pattern */
103
+ .bg-grid {
104
+ background-color: var(--dark-void);
105
+ background-image:
106
+ linear-gradient(rgba(94, 220, 244, 0.07) 1px, transparent 1px),
107
+ linear-gradient(90deg, rgba(94, 220, 244, 0.07) 1px, transparent 1px);
108
+ background-size: 40px 40px;
109
+ }
110
+
111
+ .bg-grid-pink {
112
+ background-color: var(--neon-pink);
113
+ background-image:
114
+ linear-gradient(rgba(15, 27, 61, 0.06) 1px, transparent 1px),
115
+ linear-gradient(90deg, rgba(15, 27, 61, 0.06) 1px, transparent 1px);
116
+ background-size: 40px 40px;
117
+ }
118
+
119
+ .bg-grid-cyan {
120
+ background-color: var(--neon-cyan);
121
+ background-image:
122
+ linear-gradient(rgba(15, 27, 61, 0.08) 1px, transparent 1px),
123
+ linear-gradient(90deg, rgba(15, 27, 61, 0.08) 1px, transparent 1px);
124
+ background-size: 40px 40px;
125
+ }
126
+
127
+ .bg-grid-lavender {
128
+ background-color: var(--soft-lavender);
129
+ background-image:
130
+ linear-gradient(rgba(15, 27, 61, 0.05) 1px, transparent 1px),
131
+ linear-gradient(90deg, rgba(15, 27, 61, 0.05) 1px, transparent 1px);
132
+ background-size: 40px 40px;
133
+ }
134
+
135
+ /* Moving starfield for dark slides */
136
+ .starfield {
137
+ position: absolute;
138
+ inset: 0;
139
+ overflow: hidden;
140
+ z-index: 1;
141
+ }
142
+
143
+ .starfield .star {
144
+ position: absolute;
145
+ width: 4px;
146
+ height: 4px;
147
+ background: var(--neon-cyan);
148
+ opacity: 0.6;
149
+ animation: twinkle 3s infinite ease-in-out;
150
+ }
151
+
152
+ .starfield .star:nth-child(2n) { background: var(--neon-yellow); }
153
+ .starfield .star:nth-child(3n) { background: var(--neon-pink); }
154
+ .starfield .star:nth-child(4n) { width: 6px; height: 6px; }
155
+
156
+ @keyframes twinkle {
157
+ 0%, 100% { opacity: 0.3; transform: scale(1); }
158
+ 50% { opacity: 0.9; transform: scale(1.3); }
159
+ }
160
+
161
+ /* Floating pixel particles */
162
+ .pixel-particles {
163
+ position: absolute;
164
+ inset: 0;
165
+ overflow: hidden;
166
+ z-index: 1;
167
+ pointer-events: none;
168
+ }
169
+
170
+ .pixel-particles .p {
171
+ position: absolute;
172
+ width: 8px;
173
+ height: 8px;
174
+ opacity: 0.4;
175
+ animation: float 8s infinite ease-in-out;
176
+ }
177
+
178
+ @keyframes float {
179
+ 0%, 100% { transform: translateY(0) rotate(0deg); }
180
+ 50% { transform: translateY(-30px) rotate(90deg); }
181
+ }
182
+
183
+ /* === PIXEL UI COMPONENTS === */
184
+
185
+ /* Pixel border effect */
186
+ .pixel-box {
187
+ position: relative;
188
+ background: var(--deep-navy);
189
+ color: white;
190
+ }
191
+
192
+ .pixel-box::before {
193
+ content: "";
194
+ position: absolute;
195
+ inset: -4px;
196
+ background: var(--neon-cyan);
197
+ z-index: -1;
198
+ clip-path: polygon(
199
+ 0 4px, 4px 4px, 4px 0,
200
+ calc(100% - 4px) 0, calc(100% - 4px) 4px, 100% 4px,
201
+ 100% calc(100% - 4px), calc(100% - 4px) calc(100% - 4px), calc(100% - 4px) 100%,
202
+ 4px 100%, 4px calc(100% - 4px), 0 calc(100% - 4px)
203
+ );
204
+ }
205
+
206
+ .pixel-box.yellow::before { background: var(--neon-yellow); }
207
+ .pixel-box.pink::before { background: var(--neon-pink); }
208
+
209
+ /* Pixel button */
210
+ .pixel-btn {
211
+ display: inline-block;
212
+ font-family: var(--font-display);
213
+ font-weight: 700;
214
+ font-size: 1rem;
215
+ letter-spacing: 0.08em;
216
+ text-transform: uppercase;
217
+ padding: 16px 36px;
218
+ background: var(--neon-cyan);
219
+ color: var(--deep-navy);
220
+ border: none;
221
+ cursor: pointer;
222
+ position: relative;
223
+ box-shadow:
224
+ 4px 0 0 0 var(--deep-navy),
225
+ 0 4px 0 0 var(--deep-navy),
226
+ 4px 4px 0 0 var(--deep-navy),
227
+ 8px 4px 0 0 var(--neon-yellow),
228
+ 4px 8px 0 0 var(--neon-yellow),
229
+ 8px 8px 0 0 var(--neon-yellow);
230
+ transition: transform 0.1s, box-shadow 0.1s;
231
+ }
232
+
233
+ .pixel-btn:hover {
234
+ transform: translate(2px, 2px);
235
+ box-shadow:
236
+ 2px 0 0 0 var(--deep-navy),
237
+ 0 2px 0 0 var(--deep-navy),
238
+ 2px 2px 0 0 var(--deep-navy),
239
+ 4px 2px 0 0 var(--neon-yellow),
240
+ 2px 4px 0 0 var(--neon-yellow),
241
+ 4px 4px 0 0 var(--neon-yellow);
242
+ }
243
+
244
+ .pixel-btn.pink-btn {
245
+ background: var(--neon-pink);
246
+ box-shadow:
247
+ 4px 0 0 0 var(--deep-navy),
248
+ 0 4px 0 0 var(--deep-navy),
249
+ 4px 4px 0 0 var(--deep-navy),
250
+ 8px 4px 0 0 var(--neon-cyan),
251
+ 4px 8px 0 0 var(--neon-cyan),
252
+ 8px 8px 0 0 var(--neon-cyan);
253
+ }
254
+
255
+ /* Pixel text shadow like the reference image */
256
+ .pixel-hero-text {
257
+ font-family: var(--font-display);
258
+ font-weight: 900;
259
+ font-size: clamp(3rem, 10vw, 8rem);
260
+ line-height: 1.05;
261
+ color: var(--neon-cyan);
262
+ text-shadow:
263
+ 4px 4px 0 var(--neon-yellow),
264
+ 8px 8px 0 var(--deep-navy);
265
+ letter-spacing: 0.04em;
266
+ }
267
+
268
+ /* Decorative pixel corners */
269
+ .pixel-corners {
270
+ position: relative;
271
+ }
272
+
273
+ .pixel-corners::before,
274
+ .pixel-corners::after {
275
+ content: "";
276
+ position: absolute;
277
+ width: 24px;
278
+ height: 24px;
279
+ border: 4px solid var(--neon-cyan);
280
+ }
281
+
282
+ .pixel-corners::before {
283
+ top: -8px;
284
+ left: -8px;
285
+ border-right: none;
286
+ border-bottom: none;
287
+ }
288
+
289
+ .pixel-corners::after {
290
+ bottom: -8px;
291
+ right: -8px;
292
+ border-left: none;
293
+ border-top: none;
294
+ }
295
+
296
+ .pixel-corners.yellow-corners::before,
297
+ .pixel-corners.yellow-corners::after { border-color: var(--neon-yellow); }
298
+
299
+ .pixel-corners.pink-corners::before,
300
+ .pixel-corners.pink-corners::after { border-color: var(--neon-pink); }
301
+
302
+ /* Section labels */
303
+ .pixel-label {
304
+ font-family: var(--font-mono);
305
+ font-size: 0.75rem;
306
+ font-weight: 700;
307
+ letter-spacing: 0.2em;
308
+ text-transform: uppercase;
309
+ color: var(--neon-yellow);
310
+ background: var(--deep-navy);
311
+ padding: 6px 14px;
312
+ display: inline-block;
313
+ margin-bottom: 1.5rem;
314
+ }
315
+
316
+ /* === SLIDE CONTENT LAYOUTS === */
317
+
318
+ .slide-content {
319
+ position: relative;
320
+ z-index: 10;
321
+ width: 100%;
322
+ max-width: 1200px;
323
+ display: flex;
324
+ flex-direction: column;
325
+ justify-content: center;
326
+ align-items: center;
327
+ }
328
+
329
+ h1, h2, h3, h4 {
330
+ font-family: var(--font-display);
331
+ font-weight: 700;
332
+ line-height: 1.15;
333
+ }
334
+
335
+ h1 { font-size: clamp(2rem, 5vw, 4rem); }
336
+ h2 { font-size: clamp(1.5rem, 3.5vw, 2.8rem); }
337
+ h3 { font-size: clamp(1.1rem, 2vw, 1.5rem); }
338
+ p, li {
339
+ font-family: var(--font-body);
340
+ font-size: clamp(0.9rem, 1.2vw, 1.15rem);
341
+ line-height: 1.7;
342
+ font-weight: 400;
343
+ }
344
+
345
+ /* === NAVIGATION === */
346
+ .nav-dots {
347
+ position: fixed;
348
+ right: 24px;
349
+ top: 50%;
350
+ transform: translateY(-50%);
351
+ display: flex;
352
+ flex-direction: column;
353
+ gap: 12px;
354
+ z-index: 100;
355
+ }
356
+
357
+ .nav-dot {
358
+ width: 12px;
359
+ height: 12px;
360
+ border: 2px solid var(--neon-cyan);
361
+ background: transparent;
362
+ cursor: pointer;
363
+ position: relative;
364
+ transition: all 0.3s;
365
+ }
366
+
367
+ .nav-dot::after {
368
+ content: "";
369
+ position: absolute;
370
+ inset: 2px;
371
+ background: var(--neon-cyan);
372
+ opacity: 0;
373
+ transition: opacity 0.3s;
374
+ }
375
+
376
+ .nav-dot.active::after { opacity: 1; }
377
+ .nav-dot:hover { border-color: var(--neon-yellow); }
378
+
379
+ .slide-counter {
380
+ position: fixed;
381
+ bottom: 24px;
382
+ left: 50%;
383
+ transform: translateX(-50%);
384
+ font-family: var(--font-mono);
385
+ font-size: 0.8rem;
386
+ color: var(--neon-cyan);
387
+ background: rgba(10, 14, 39, 0.8);
388
+ padding: 8px 20px;
389
+ z-index: 100;
390
+ letter-spacing: 0.15em;
391
+ }
392
+
393
+ /* === CUSTOM CURSOR AREA === */
394
+ .deck {
395
+ cursor: crosshair;
396
+ }
397
+
398
+ /* === SPECIFIC SLIDE STYLES === */
399
+
400
+ /* Slide 1: Hero */
401
+ .hero-subtitle {
402
+ font-family: var(--font-mono);
403
+ font-size: 0.85rem;
404
+ letter-spacing: 0.3em;
405
+ color: var(--neon-pink);
406
+ text-transform: uppercase;
407
+ margin-bottom: 1.5rem;
408
+ }
409
+
410
+ .hero-tagline {
411
+ font-family: var(--font-body);
412
+ font-size: clamp(0.9rem, 1.5vw, 1.2rem);
413
+ color: rgba(255,255,255,0.7);
414
+ max-width: 500px;
415
+ text-align: center;
416
+ margin-top: 2rem;
417
+ line-height: 1.8;
418
+ }
419
+
420
+ .hero-badges {
421
+ display: flex;
422
+ gap: 16px;
423
+ margin-top: 3rem;
424
+ flex-wrap: wrap;
425
+ justify-content: center;
426
+ }
427
+
428
+ .hero-badge {
429
+ font-family: var(--font-mono);
430
+ font-size: 0.7rem;
431
+ letter-spacing: 0.1em;
432
+ text-transform: uppercase;
433
+ padding: 8px 16px;
434
+ border: 2px solid var(--neon-yellow);
435
+ color: var(--neon-yellow);
436
+ }
437
+
438
+ /* Slide 2: Split Intro */
439
+ .split-layout {
440
+ display: grid;
441
+ grid-template-columns: 1fr 1fr;
442
+ gap: 4vw;
443
+ align-items: center;
444
+ width: 100%;
445
+ height: 100%;
446
+ max-width: 1100px;
447
+ }
448
+
449
+ @media (max-width: 768px) {
450
+ .split-layout { grid-template-columns: 1fr; }
451
+ }
452
+
453
+ .pixel-avatar-zone {
454
+ width: 100%;
455
+ aspect-ratio: 1;
456
+ max-width: 380px;
457
+ margin: 0 auto;
458
+ background: var(--deep-navy);
459
+ position: relative;
460
+ display: flex;
461
+ align-items: center;
462
+ justify-content: center;
463
+ }
464
+
465
+ .pixel-avatar-zone::before {
466
+ content: "";
467
+ position: absolute;
468
+ inset: 0;
469
+ background:
470
+ repeating-linear-gradient(
471
+ 45deg,
472
+ transparent,
473
+ transparent 10px,
474
+ rgba(94, 220, 244, 0.1) 10px,
475
+ rgba(94, 220, 244, 0.1) 20px
476
+ );
477
+ }
478
+
479
+ .pixel-face {
480
+ width: 120px;
481
+ height: 120px;
482
+ position: relative;
483
+ }
484
+
485
+ .pixel-face .eye {
486
+ position: absolute;
487
+ width: 24px;
488
+ height: 24px;
489
+ background: var(--neon-cyan);
490
+ top: 30px;
491
+ }
492
+
493
+ .pixel-face .eye.left { left: 16px; }
494
+ .pixel-face .eye.right { right: 16px; }
495
+
496
+ .pixel-face .mouth {
497
+ position: absolute;
498
+ width: 60px;
499
+ height: 16px;
500
+ background: var(--neon-pink);
501
+ bottom: 24px;
502
+ left: 50%;
503
+ transform: translateX(-50%);
504
+ }
505
+
506
+ /* Slide 3: Feature Grid */
507
+ .feature-grid {
508
+ display: grid;
509
+ grid-template-columns: repeat(4, 1fr);
510
+ gap: 24px;
511
+ width: 100%;
512
+ max-width: 1000px;
513
+ }
514
+
515
+ @media (max-width: 900px) {
516
+ .feature-grid { grid-template-columns: repeat(2, 1fr); }
517
+ }
518
+
519
+ @media (max-width: 500px) {
520
+ .feature-grid { grid-template-columns: 1fr; }
521
+ }
522
+
523
+ .feature-card {
524
+ background: rgba(255,255,255,0.15);
525
+ backdrop-filter: blur(8px);
526
+ padding: 32px 24px;
527
+ text-align: center;
528
+ position: relative;
529
+ border: 2px solid rgba(15, 27, 61, 0.2);
530
+ }
531
+
532
+ .feature-card::before {
533
+ content: "";
534
+ position: absolute;
535
+ top: -2px;
536
+ left: -2px;
537
+ width: 16px;
538
+ height: 16px;
539
+ border-top: 4px solid var(--deep-navy);
540
+ border-left: 4px solid var(--deep-navy);
541
+ }
542
+
543
+ .feature-card::after {
544
+ content: "";
545
+ position: absolute;
546
+ bottom: -2px;
547
+ right: -2px;
548
+ width: 16px;
549
+ height: 16px;
550
+ border-bottom: 4px solid var(--deep-navy);
551
+ border-right: 4px solid var(--deep-navy);
552
+ }
553
+
554
+ .feature-icon {
555
+ width: 48px;
556
+ height: 48px;
557
+ margin: 0 auto 16px;
558
+ position: relative;
559
+ }
560
+
561
+ .feature-icon.cube {
562
+ background: var(--deep-navy);
563
+ box-shadow: 6px 6px 0 var(--neon-yellow);
564
+ }
565
+
566
+ .feature-icon.diamond {
567
+ background: var(--neon-cyan);
568
+ transform: rotate(45deg);
569
+ width: 36px;
570
+ height: 36px;
571
+ margin-bottom: 22px;
572
+ margin-top: 6px;
573
+ }
574
+
575
+ .feature-icon.cross {
576
+ background: var(--neon-pink);
577
+ position: relative;
578
+ }
579
+
580
+ .feature-icon.cross::before,
581
+ .feature-icon.cross::after {
582
+ content: "";
583
+ position: absolute;
584
+ background: var(--deep-navy);
585
+ }
586
+
587
+ .feature-icon.cross::before { inset: 10px 4px; }
588
+ .feature-icon.cross::after { inset: 4px 10px; }
589
+
590
+ .feature-icon.circle {
591
+ border: 6px solid var(--neon-yellow);
592
+ border-radius: 0; /* pixel circle = square with careful shading? actually keep square for pixel aesthetic */
593
+ background: transparent;
594
+ position: relative;
595
+ }
596
+
597
+ .feature-icon.circle::after {
598
+ content: "";
599
+ position: absolute;
600
+ inset: 8px;
601
+ background: var(--neon-yellow);
602
+ }
603
+
604
+ .feature-card h3 {
605
+ font-size: 1.1rem;
606
+ margin-bottom: 8px;
607
+ color: var(--deep-navy);
608
+ }
609
+
610
+ .feature-card p {
611
+ font-size: 0.85rem;
612
+ color: rgba(15, 27, 61, 0.75);
613
+ line-height: 1.6;
614
+ }
615
+
616
+ /* Slide 4 & 5: Charts */
617
+ .chart-slide-layout {
618
+ width: 100%;
619
+ max-width: 900px;
620
+ display: flex;
621
+ flex-direction: column;
622
+ align-items: center;
623
+ }
624
+
625
+ .pixel-chart-title {
626
+ text-align: center;
627
+ margin-bottom: 3rem;
628
+ }
629
+
630
+ .pixel-chart-title h2 {
631
+ color: var(--neon-cyan);
632
+ margin-bottom: 0.5rem;
633
+ }
634
+
635
+ .pixel-chart-title .subtitle {
636
+ font-family: var(--font-mono);
637
+ font-size: 0.8rem;
638
+ color: var(--neon-pink);
639
+ letter-spacing: 0.15em;
640
+ }
641
+
642
+ /* Bar Chart */
643
+ .pixel-bar-chart {
644
+ width: 100%;
645
+ display: flex;
646
+ align-items: flex-end;
647
+ justify-content: center;
648
+ gap: 24px;
649
+ height: 320px;
650
+ padding: 0 20px;
651
+ position: relative;
652
+ }
653
+
654
+ .pixel-bar-chart::before {
655
+ content: "";
656
+ position: absolute;
657
+ bottom: 0;
658
+ left: 0;
659
+ right: 0;
660
+ height: 2px;
661
+ background: var(--neon-cyan);
662
+ opacity: 0.5;
663
+ }
664
+
665
+ .chart-bar-group {
666
+ display: flex;
667
+ flex-direction: column;
668
+ align-items: center;
669
+ gap: 12px;
670
+ flex: 1;
671
+ max-width: 100px;
672
+ }
673
+
674
+ .chart-bar {
675
+ width: 100%;
676
+ background: var(--neon-cyan);
677
+ position: relative;
678
+ box-shadow: 4px 0 0 0 var(--deep-navy), 0 4px 0 0 var(--deep-navy), 4px 4px 0 0 var(--deep-navy);
679
+ transition: height 1s cubic-bezier(0.22, 1, 0.36, 1);
680
+ }
681
+
682
+ .chart-bar.alt { background: var(--neon-pink); }
683
+ .chart-bar.alt2 { background: var(--neon-yellow); }
684
+
685
+ .chart-bar-label {
686
+ font-family: var(--font-mono);
687
+ font-size: 0.7rem;
688
+ color: rgba(255,255,255,0.8);
689
+ text-align: center;
690
+ letter-spacing: 0.05em;
691
+ }
692
+
693
+ .chart-value {
694
+ font-family: var(--font-mono);
695
+ font-size: 0.75rem;
696
+ font-weight: 700;
697
+ color: var(--neon-yellow);
698
+ margin-bottom: 4px;
699
+ }
700
+
701
+ /* Horizontal Bar Chart */
702
+ .pixel-hbar-chart {
703
+ width: 100%;
704
+ display: flex;
705
+ flex-direction: column;
706
+ gap: 20px;
707
+ }
708
+
709
+ .hbar-row {
710
+ display: grid;
711
+ grid-template-columns: 120px 1fr 50px;
712
+ align-items: center;
713
+ gap: 16px;
714
+ }
715
+
716
+ .hbar-label {
717
+ font-family: var(--font-mono);
718
+ font-size: 0.75rem;
719
+ color: var(--deep-navy);
720
+ text-align: right;
721
+ font-weight: 700;
722
+ }
723
+
724
+ .hbar-track {
725
+ height: 32px;
726
+ background: rgba(15, 27, 61, 0.1);
727
+ position: relative;
728
+ }
729
+
730
+ .hbar-fill {
731
+ height: 100%;
732
+ background: var(--deep-navy);
733
+ position: relative;
734
+ box-shadow: 4px 4px 0 var(--neon-yellow);
735
+ transition: width 1s cubic-bezier(0.22, 1, 0.36, 1);
736
+ }
737
+
738
+ .hbar-fill.alt { background: var(--neon-cyan); box-shadow: 4px 4px 0 var(--deep-navy); }
739
+ .hbar-fill.alt2 { background: var(--neon-pink); box-shadow: 4px 4px 0 var(--deep-navy); }
740
+
741
+ .hbar-value {
742
+ font-family: var(--font-mono);
743
+ font-size: 0.8rem;
744
+ font-weight: 700;
745
+ color: var(--deep-navy);
746
+ }
747
+
748
+ /* Slide 6: Timeline */
749
+ .timeline-container {
750
+ width: 100%;
751
+ max-width: 900px;
752
+ position: relative;
753
+ }
754
+
755
+ .timeline-line {
756
+ position: absolute;
757
+ left: 50%;
758
+ top: 0;
759
+ bottom: 0;
760
+ width: 4px;
761
+ background: repeating-linear-gradient(
762
+ to bottom,
763
+ var(--deep-navy) 0px,
764
+ var(--deep-navy) 16px,
765
+ transparent 16px,
766
+ transparent 24px
767
+ );
768
+ transform: translateX(-50%);
769
+ }
770
+
771
+ .timeline-events {
772
+ display: flex;
773
+ flex-direction: column;
774
+ gap: 32px;
775
+ position: relative;
776
+ }
777
+
778
+ .timeline-event {
779
+ display: grid;
780
+ grid-template-columns: 1fr 60px 1fr;
781
+ align-items: center;
782
+ gap: 24px;
783
+ }
784
+
785
+ .timeline-event:nth-child(even) .timeline-text { grid-column: 3; text-align: left; }
786
+ .timeline-event:nth-child(even) .timeline-spacer { grid-column: 2; }
787
+ .timeline-event:nth-child(even) .timeline-empty { grid-column: 1; }
788
+
789
+ .timeline-event:nth-child(odd) .timeline-text { grid-column: 1; text-align: right; }
790
+ .timeline-event:nth-child(odd) .timeline-spacer { grid-column: 2; }
791
+ .timeline-event:nth-child(odd) .timeline-empty { grid-column: 3; }
792
+
793
+ .timeline-node {
794
+ width: 24px;
795
+ height: 24px;
796
+ background: var(--neon-cyan);
797
+ border: 4px solid var(--deep-navy);
798
+ justify-self: center;
799
+ position: relative;
800
+ z-index: 2;
801
+ }
802
+
803
+ .timeline-node.active { background: var(--neon-yellow); }
804
+
805
+ .timeline-text h4 {
806
+ font-size: 1rem;
807
+ color: var(--deep-navy);
808
+ margin-bottom: 4px;
809
+ }
810
+
811
+ .timeline-text p {
812
+ font-size: 0.85rem;
813
+ color: rgba(15, 27, 61, 0.7);
814
+ line-height: 1.5;
815
+ }
816
+
817
+ .timeline-text .date {
818
+ font-family: var(--font-mono);
819
+ font-size: 0.7rem;
820
+ color: var(--neon-cyan);
821
+ background: var(--deep-navy);
822
+ display: inline-block;
823
+ padding: 2px 10px;
824
+ margin-bottom: 8px;
825
+ }
826
+
827
+ @media (max-width: 700px) {
828
+ .timeline-event {
829
+ grid-template-columns: 40px 1fr !important;
830
+ }
831
+ .timeline-event .timeline-empty { display: none; }
832
+ .timeline-event .timeline-text { grid-column: 2 !important; text-align: left !important; }
833
+ .timeline-line { left: 20px; }
834
+ .timeline-node { justify-self: start; }
835
+ }
836
+
837
+ /* Slide 7: Stats */
838
+ .stats-grid {
839
+ display: grid;
840
+ grid-template-columns: repeat(4, 1fr);
841
+ gap: 32px;
842
+ width: 100%;
843
+ max-width: 900px;
844
+ }
845
+
846
+ @media (max-width: 800px) {
847
+ .stats-grid { grid-template-columns: repeat(2, 1fr); }
848
+ }
849
+
850
+ @media (max-width: 400px) {
851
+ .stats-grid { grid-template-columns: 1fr; }
852
+ }
853
+
854
+ .stat-block {
855
+ text-align: center;
856
+ padding: 32px 16px;
857
+ background: rgba(94, 220, 244, 0.08);
858
+ border: 2px solid rgba(94, 220, 244, 0.2);
859
+ position: relative;
860
+ }
861
+
862
+ .stat-block::before {
863
+ content: "";
864
+ position: absolute;
865
+ top: -2px;
866
+ left: -2px;
867
+ width: 20px;
868
+ height: 20px;
869
+ border-top: 4px solid var(--neon-cyan);
870
+ border-left: 4px solid var(--neon-cyan);
871
+ }
872
+
873
+ .stat-block::after {
874
+ content: "";
875
+ position: absolute;
876
+ bottom: -2px;
877
+ right: -2px;
878
+ width: 20px;
879
+ height: 20px;
880
+ border-bottom: 4px solid var(--neon-cyan);
881
+ border-right: 4px solid var(--neon-cyan);
882
+ }
883
+
884
+ .stat-number {
885
+ font-family: var(--font-display);
886
+ font-size: clamp(2rem, 4vw, 3.5rem);
887
+ font-weight: 900;
888
+ color: var(--neon-cyan);
889
+ line-height: 1;
890
+ margin-bottom: 8px;
891
+ text-shadow: 3px 3px 0 var(--deep-navy);
892
+ }
893
+
894
+ .stat-label {
895
+ font-family: var(--font-mono);
896
+ font-size: 0.7rem;
897
+ letter-spacing: 0.12em;
898
+ text-transform: uppercase;
899
+ color: var(--neon-pink);
900
+ }
901
+
902
+ /* Slide 8: Quote */
903
+ .quote-container {
904
+ max-width: 700px;
905
+ text-align: center;
906
+ position: relative;
907
+ padding: 48px;
908
+ }
909
+
910
+ .quote-mark {
911
+ font-family: var(--font-display);
912
+ font-size: 8rem;
913
+ line-height: 1;
914
+ color: var(--deep-navy);
915
+ opacity: 0.15;
916
+ position: absolute;
917
+ top: -20px;
918
+ left: 50%;
919
+ transform: translateX(-50%);
920
+ }
921
+
922
+ .quote-text {
923
+ font-family: var(--font-body);
924
+ font-size: clamp(1.1rem, 2.2vw, 1.6rem);
925
+ font-weight: 500;
926
+ font-style: italic;
927
+ color: var(--deep-navy);
928
+ line-height: 1.8;
929
+ position: relative;
930
+ z-index: 2;
931
+ }
932
+
933
+ .quote-author {
934
+ margin-top: 2rem;
935
+ font-family: var(--font-mono);
936
+ font-size: 0.8rem;
937
+ color: rgba(15, 27, 61, 0.7);
938
+ letter-spacing: 0.1em;
939
+ }
940
+
941
+ .quote-line {
942
+ width: 60px;
943
+ height: 4px;
944
+ background: var(--neon-yellow);
945
+ margin: 1.5rem auto 0;
946
+ box-shadow: 4px 4px 0 var(--deep-navy);
947
+ }
948
+
949
+ /* Slide 9: Comparison / Cards */
950
+ .tier-grid {
951
+ display: grid;
952
+ grid-template-columns: repeat(3, 1fr);
953
+ gap: 24px;
954
+ width: 100%;
955
+ max-width: 900px;
956
+ }
957
+
958
+ @media (max-width: 800px) {
959
+ .tier-grid { grid-template-columns: 1fr; max-width: 400px; }
960
+ }
961
+
962
+ .tier-card {
963
+ background: white;
964
+ padding: 36px 28px;
965
+ position: relative;
966
+ text-align: center;
967
+ }
968
+
969
+ .tier-card.featured {
970
+ background: var(--deep-navy);
971
+ color: white;
972
+ transform: translateY(-12px);
973
+ box-shadow: 8px 8px 0 var(--neon-yellow);
974
+ }
975
+
976
+ .tier-card:not(.featured) {
977
+ box-shadow: 6px 6px 0 rgba(15, 27, 61, 0.15);
978
+ }
979
+
980
+ .tier-name {
981
+ font-family: var(--font-display);
982
+ font-size: 1.2rem;
983
+ margin-bottom: 8px;
984
+ }
985
+
986
+ .tier-price {
987
+ font-family: var(--font-mono);
988
+ font-size: 2rem;
989
+ font-weight: 700;
990
+ color: var(--neon-cyan);
991
+ margin-bottom: 4px;
992
+ }
993
+
994
+ .tier-price span {
995
+ font-size: 0.8rem;
996
+ color: rgba(15, 27, 61, 0.5);
997
+ }
998
+
999
+ .tier-card.featured .tier-price span { color: rgba(255,255,255,0.5); }
1000
+
1001
+ .tier-desc {
1002
+ font-size: 0.8rem;
1003
+ color: rgba(15, 27, 61, 0.6);
1004
+ margin-bottom: 20px;
1005
+ line-height: 1.5;
1006
+ }
1007
+
1008
+ .tier-card.featured .tier-desc { color: rgba(255,255,255,0.6); }
1009
+
1010
+ .tier-features {
1011
+ list-style: none;
1012
+ text-align: left;
1013
+ margin-bottom: 24px;
1014
+ }
1015
+
1016
+ .tier-features li {
1017
+ font-size: 0.8rem;
1018
+ padding: 6px 0;
1019
+ border-bottom: 1px dashed rgba(15, 27, 61, 0.15);
1020
+ position: relative;
1021
+ padding-left: 20px;
1022
+ }
1023
+
1024
+ .tier-features li::before {
1025
+ content: "+";
1026
+ position: absolute;
1027
+ left: 0;
1028
+ font-family: var(--font-mono);
1029
+ color: var(--neon-cyan);
1030
+ font-weight: 700;
1031
+ }
1032
+
1033
+ .tier-card.featured .tier-features li { border-color: rgba(255,255,255,0.1); }
1034
+
1035
+ /* Slide 10: CTA */
1036
+ .cta-content {
1037
+ text-align: center;
1038
+ max-width: 600px;
1039
+ }
1040
+
1041
+ .cta-content h2 {
1042
+ font-size: clamp(2rem, 5vw, 3.5rem);
1043
+ color: var(--neon-cyan);
1044
+ margin-bottom: 1rem;
1045
+ text-shadow: 4px 4px 0 var(--deep-navy), 8px 8px 0 var(--neon-yellow);
1046
+ }
1047
+
1048
+ .cta-content p {
1049
+ color: rgba(255,255,255,0.7);
1050
+ margin-bottom: 2.5rem;
1051
+ font-size: 1.1rem;
1052
+ }
1053
+
1054
+ .cta-buttons {
1055
+ display: flex;
1056
+ gap: 20px;
1057
+ justify-content: center;
1058
+ flex-wrap: wrap;
1059
+ }
1060
+
1061
+ /* Decorative pixel landscape at bottom of CTA */
1062
+ .pixel-landscape {
1063
+ position: absolute;
1064
+ bottom: 0;
1065
+ left: 0;
1066
+ right: 0;
1067
+ height: 120px;
1068
+ display: flex;
1069
+ align-items: flex-end;
1070
+ justify-content: center;
1071
+ gap: 0;
1072
+ z-index: 2;
1073
+ opacity: 0.3;
1074
+ pointer-events: none;
1075
+ }
1076
+
1077
+ .mountain {
1078
+ background: var(--deep-navy);
1079
+ width: 80px;
1080
+ position: relative;
1081
+ }
1082
+
1083
+ /* Arrow hints */
1084
+ .nav-hint {
1085
+ position: fixed;
1086
+ bottom: 24px;
1087
+ right: 24px;
1088
+ font-family: var(--font-mono);
1089
+ font-size: 0.65rem;
1090
+ color: var(--neon-cyan);
1091
+ opacity: 0.5;
1092
+ z-index: 100;
1093
+ letter-spacing: 0.1em;
1094
+ }
1095
+
1096
+ /* Reduced motion */
1097
+ @media (prefers-reduced-motion: reduce) {
1098
+ .slides-container { transition: none; }
1099
+ .starfield .star, .pixel-particles .p { animation: none; }
1100
+ .chart-bar, .hbar-fill { transition: none; }
1101
+ }
1102
+ </style>
1103
+ </head>
1104
+ <body>
1105
+
1106
+ <div class="deck" id="deck">
1107
+
1108
+ <!-- Navigation Dots -->
1109
+ <div class="nav-dots" id="navDots"></div>
1110
+
1111
+ <!-- Slide Counter -->
1112
+ <div class="slide-counter" id="slideCounter">01 / 10</div>
1113
+
1114
+ <!-- Keyboard hint -->
1115
+ <div class="nav-hint">USE KEYS &uarr; &darr;</div>
1116
+
1117
+ <div class="slides-container" id="slidesContainer">
1118
+
1119
+ <!-- ========== SLIDE 1: HERO ========== -->
1120
+ <section class="slide bg-grid scanlines grain crt-glow" data-slide="1">
1121
+ <div class="starfield" id="starfield1"></div>
1122
+ <div class="pixel-particles" id="particles1"></div>
1123
+ <div class="slide-content" style="z-index:10;">
1124
+ <div class="hero-subtitle">Pixel Perfect Presentation System</div>
1125
+ <h1 class="pixel-hero-text" style="text-align:center;">8-BIT<br>ORBIT</h1>
1126
+ <p class="hero-tagline">A retro-futuristic deck engine for bold storytellers. Built for arcades, engineered for boardrooms.</p>
1127
+ <div class="hero-badges">
1128
+ <span class="hero-badge">10 Slides</span>
1129
+ <span class="hero-badge">CSS Native</span>
1130
+ <span class="hero-badge">Zero Dependencies</span>
1131
+ </div>
1132
+ </div>
1133
+ </section>
1134
+
1135
+ <!-- ========== SLIDE 2: SPLIT INTRO ========== -->
1136
+ <section class="slide bg-grid-pink scanlines grain" data-slide="2">
1137
+ <div class="slide-content">
1138
+ <div class="split-layout">
1139
+ <div class="pixel-avatar-zone pixel-corners yellow-corners">
1140
+ <div class="pixel-face">
1141
+ <div class="eye left"></div>
1142
+ <div class="eye right"></div>
1143
+ <div class="mouth"></div>
1144
+ </div>
1145
+ </div>
1146
+ <div style="max-width: 460px;">
1147
+ <span class="pixel-label">Mission Brief</span>
1148
+ <h2 style="color: var(--deep-navy); margin-bottom: 1.2rem; font-size: clamp(1.6rem, 3vw, 2.4rem);">Rewiring How We Share Ideas</h2>
1149
+ <p style="color: rgba(15,27,61,0.75); margin-bottom: 1rem;">
1150
+ Every presentation is an opportunity to transport your audience. This template fuses the tactile nostalgia of 16-bit aesthetics with modern typographic discipline.
1151
+ </p>
1152
+ <p style="color: rgba(15,27,61,0.75);">
1153
+ No canvas limits. No cookie-cutter layouts. Just pure CSS architecture delivering cinematic slide transitions and atmospheric depth through scanlines, grain, and glowing grids.
1154
+ </p>
1155
+ </div>
1156
+ </div>
1157
+ </div>
1158
+ </section>
1159
+
1160
+ <!-- ========== SLIDE 3: FEATURE GRID ========== -->
1161
+ <section class="slide bg-grid-cyan scanlines grain" data-slide="3">
1162
+ <div class="slide-content">
1163
+ <div style="text-align: center; margin-bottom: 2.5rem;">
1164
+ <span class="pixel-label" style="background: var(--deep-navy); color: var(--neon-cyan);">Core Systems</span>
1165
+ <h2 style="color: var(--deep-navy);">Four Engines Running</h2>
1166
+ </div>
1167
+ <div class="feature-grid">
1168
+ <div class="feature-card">
1169
+ <div class="feature-icon cube"></div>
1170
+ <h3>Modular Blocks</h3>
1171
+ <p>Swap components without breaking the grid. Every element is containerized and responsive by default.</p>
1172
+ </div>
1173
+ <div class="feature-card">
1174
+ <div class="feature-icon diamond"></div>
1175
+ <h3>Crisp Vectors</h3>
1176
+ <p>All visual effects are native CSS. No image assets required for borders, shadows, or patterns.</p>
1177
+ </div>
1178
+ <div class="feature-card">
1179
+ <div class="feature-icon cross"></div>
1180
+ <h3>Live Data</h3>
1181
+ <p>Chart slides accept dynamic values. Bars grow with CSS transitions triggered on navigation.</p>
1182
+ </div>
1183
+ <div class="feature-card">
1184
+ <div class="feature-icon circle"></div>
1185
+ <h3>Retro Atmosphere</h3>
1186
+ <p>Scanlines, CRT vignettes, starfields, and noise layers create an immersive viewing environment.</p>
1187
+ </div>
1188
+ </div>
1189
+ </div>
1190
+ </section>
1191
+
1192
+ <!-- ========== SLIDE 4: VERTICAL BAR CHART ========== -->
1193
+ <section class="slide bg-grid scanlines grain crt-glow" data-slide="4">
1194
+ <div class="starfield" id="starfield4"></div>
1195
+ <div class="slide-content">
1196
+ <div class="chart-slide-layout">
1197
+ <div class="pixel-chart-title">
1198
+ <span class="pixel-label">Analytics Core</span>
1199
+ <h2>Quarterly Growth Metrics</h2>
1200
+ <p class="subtitle">Fiscal performance across four sectors &mdash; normalized index</p>
1201
+ </div>
1202
+ <div class="pixel-bar-chart" id="barChart">
1203
+ <div class="chart-bar-group">
1204
+ <div class="chart-value" data-value="78">0</div>
1205
+ <div class="chart-bar" data-height="78" style="height: 0%;"></div>
1206
+ <div class="chart-bar-label">Alpha</div>
1207
+ </div>
1208
+ <div class="chart-bar-group">
1209
+ <div class="chart-value" data-value="92">0</div>
1210
+ <div class="chart-bar alt" data-height="92" style="height: 0%;"></div>
1211
+ <div class="chart-bar-label">Beta</div>
1212
+ </div>
1213
+ <div class="chart-bar-group">
1214
+ <div class="chart-value" data-value="64">0</div>
1215
+ <div class="chart-bar alt2" data-height="64" style="height: 0%;"></div>
1216
+ <div class="chart-bar-label">Gamma</div>
1217
+ </div>
1218
+ <div class="chart-bar-group">
1219
+ <div class="chart-value" data-value="85">0</div>
1220
+ <div class="chart-bar" data-height="85" style="height: 0%;"></div>
1221
+ <div class="chart-bar-label">Delta</div>
1222
+ </div>
1223
+ <div class="chart-bar-group">
1224
+ <div class="chart-value" data-value="56">0</div>
1225
+ <div class="chart-bar alt" data-height="56" style="height: 0%;"></div>
1226
+ <div class="chart-bar-label">Epsilon</div>
1227
+ </div>
1228
+ </div>
1229
+ </div>
1230
+ </div>
1231
+ </section>
1232
+
1233
+ <!-- ========== SLIDE 5: HORIZONTAL BAR CHART ========== -->
1234
+ <section class="slide bg-grid-lavender scanlines grain" data-slide="5">
1235
+ <div class="slide-content">
1236
+ <div class="chart-slide-layout">
1237
+ <div class="pixel-chart-title" style="margin-bottom: 2.5rem;">
1238
+ <span class="pixel-label" style="background: var(--deep-navy); color: var(--neon-yellow);">System Load</span>
1239
+ <h2 style="color: var(--deep-navy);">Resource Allocation</h2>
1240
+ <p class="subtitle" style="color: rgba(15,27,61,0.6);">Percentage distribution across operational units</p>
1241
+ </div>
1242
+ <div class="pixel-hbar-chart" id="hbarChart">
1243
+ <div class="hbar-row">
1244
+ <div class="hbar-label">Compute</div>
1245
+ <div class="hbar-track">
1246
+ <div class="hbar-fill" data-width="88" style="width: 0%;"></div>
1247
+ </div>
1248
+ <div class="hbar-value">88%</div>
1249
+ </div>
1250
+ <div class="hbar-row">
1251
+ <div class="hbar-label">Storage</div>
1252
+ <div class="hbar-track">
1253
+ <div class="hbar-fill alt" data-width="72" style="width: 0%;"></div>
1254
+ </div>
1255
+ <div class="hbar-value">72%</div>
1256
+ </div>
1257
+ <div class="hbar-row">
1258
+ <div class="hbar-label">Network</div>
1259
+ <div class="hbar-track">
1260
+ <div class="hbar-fill alt2" data-width="95" style="width: 0%;"></div>
1261
+ </div>
1262
+ <div class="hbar-value">95%</div>
1263
+ </div>
1264
+ <div class="hbar-row">
1265
+ <div class="hbar-label">Memory</div>
1266
+ <div class="hbar-track">
1267
+ <div class="hbar-fill" data-width="61" style="width: 0%;"></div>
1268
+ </div>
1269
+ <div class="hbar-value">61%</div>
1270
+ </div>
1271
+ <div class="hbar-row">
1272
+ <div class="hbar-label">Graphics</div>
1273
+ <div class="hbar-track">
1274
+ <div class="hbar-fill alt" data-width="44" style="width: 0%;"></div>
1275
+ </div>
1276
+ <div class="hbar-value">44%</div>
1277
+ </div>
1278
+ </div>
1279
+ </div>
1280
+ </div>
1281
+ </section>
1282
+
1283
+ <!-- ========== SLIDE 6: TIMELINE ========== -->
1284
+ <section class="slide bg-grid-pink scanlines grain" data-slide="6">
1285
+ <div class="slide-content">
1286
+ <div style="text-align: center; margin-bottom: 2.5rem;">
1287
+ <span class="pixel-label">Chronology</span>
1288
+ <h2 style="color: var(--deep-navy);">Development Roadmap</h2>
1289
+ </div>
1290
+ <div class="timeline-container">
1291
+ <div class="timeline-line"></div>
1292
+ <div class="timeline-events">
1293
+ <div class="timeline-event">
1294
+ <div class="timeline-text">
1295
+ <span class="date">Q1 2026</span>
1296
+ <h4>Concept & Architecture</h4>
1297
+ <p>Wireframes, palette selection, and core grid system established.</p>
1298
+ </div>
1299
+ <div class="timeline-spacer">
1300
+ <div class="timeline-node active"></div>
1301
+ </div>
1302
+ <div class="timeline-empty"></div>
1303
+ </div>
1304
+ <div class="timeline-event">
1305
+ <div class="timeline-empty"></div>
1306
+ <div class="timeline-spacer">
1307
+ <div class="timeline-node active"></div>
1308
+ </div>
1309
+ <div class="timeline-text">
1310
+ <span class="date">Q2 2026</span>
1311
+ <h4>Asset Generation</h4>
1312
+ <p>Pixel components, iconography, and atmospheric effects coded.</p>
1313
+ </div>
1314
+ </div>
1315
+ <div class="timeline-event">
1316
+ <div class="timeline-text">
1317
+ <span class="date">Q3 2026</span>
1318
+ <h4>Data Integration</h4>
1319
+ <p>Charting engine, animated counters, and dynamic state binding.</p>
1320
+ </div>
1321
+ <div class="timeline-spacer">
1322
+ <div class="timeline-node"></div>
1323
+ </div>
1324
+ <div class="timeline-empty"></div>
1325
+ </div>
1326
+ <div class="timeline-event">
1327
+ <div class="timeline-empty"></div>
1328
+ <div class="timeline-spacer">
1329
+ <div class="timeline-node"></div>
1330
+ </div>
1331
+ <div class="timeline-text">
1332
+ <span class="date">Q4 2026</span>
1333
+ <h4>Global Launch</h4>
1334
+ <p>Public release with full documentation and community support.</p>
1335
+ </div>
1336
+ </div>
1337
+ </div>
1338
+ </div>
1339
+ </div>
1340
+ </section>
1341
+
1342
+ <!-- ========== SLIDE 7: STATS / COUNTERS ========== -->
1343
+ <section class="slide bg-grid scanlines grain crt-glow" data-slide="7">
1344
+ <div class="starfield" id="starfield7"></div>
1345
+ <div class="slide-content">
1346
+ <div style="text-align: center; margin-bottom: 2.5rem;">
1347
+ <span class="pixel-label">Live Telemetry</span>
1348
+ <h2 style="color: var(--neon-cyan);">Platform Vitals</h2>
1349
+ <p style="color: rgba(255,255,255,0.5); font-size: 0.9rem; margin-top: 0.5rem;">Real-time aggregate figures from active deployments</p>
1350
+ </div>
1351
+ <div class="stats-grid" id="statsGrid">
1352
+ <div class="stat-block">
1353
+ <div class="stat-number" data-target="847">0</div>
1354
+ <div class="stat-label">Active Worlds</div>
1355
+ </div>
1356
+ <div class="stat-block">
1357
+ <div class="stat-number" data-target="12.4" data-suffix="M">0</div>
1358
+ <div class="stat-label">Pixels Rendered</div>
1359
+ </div>
1360
+ <div class="stat-block">
1361
+ <div class="stat-number" data-target="99.9" data-suffix="%">0</div>
1362
+ <div class="stat-label">Uptime Score</div>
1363
+ </div>
1364
+ <div class="stat-block">
1365
+ <div class="stat-number" data-target="2048">0</div>
1366
+ <div class="stat-label">Max Resolution</div>
1367
+ </div>
1368
+ </div>
1369
+ </div>
1370
+ </section>
1371
+
1372
+ <!-- ========== SLIDE 8: QUOTE ========== -->
1373
+ <section class="slide bg-grid-cyan scanlines grain" data-slide="8">
1374
+ <div class="slide-content">
1375
+ <div class="quote-container pixel-corners">
1376
+ <div class="quote-mark">"</div>
1377
+ <p class="quote-text">
1378
+ The best presentations do not merely inform. They immerse. They transform the conference room into an arcade cabinet where every slide is a new level waiting to be unlocked.
1379
+ </p>
1380
+ <div class="quote-line"></div>
1381
+ <div class="quote-author">&mdash; Lead Creative Technologist, Studio Orbital</div>
1382
+ </div>
1383
+ </div>
1384
+ </section>
1385
+
1386
+ <!-- ========== SLIDE 9: PRICING TIERS ========== -->
1387
+ <section class="slide bg-grid-lavender scanlines grain" data-slide="9">
1388
+ <div class="slide-content">
1389
+ <div style="text-align: center; margin-bottom: 2.5rem;">
1390
+ <span class="pixel-label" style="background: var(--deep-navy); color: var(--neon-pink);">Access Tiers</span>
1391
+ <h2 style="color: var(--deep-navy);">Choose Your Loadout</h2>
1392
+ </div>
1393
+ <div class="tier-grid">
1394
+ <div class="tier-card">
1395
+ <div class="tier-name">Rookie</div>
1396
+ <div class="tier-price">$0<span>/mo</span></div>
1397
+ <div class="tier-desc">For solo explorers testing the waters.</div>
1398
+ <ul class="tier-features">
1399
+ <li>5 slide maximum</li>
1400
+ <li>Standard grid themes</li>
1401
+ <li>Community support</li>
1402
+ <li>Static export only</li>
1403
+ </ul>
1404
+ <button class="pixel-btn" style="font-size: 0.8rem; padding: 12px 24px;">Select</button>
1405
+ </div>
1406
+ <div class="tier-card featured">
1407
+ <div class="tier-name" style="color: var(--neon-yellow);">Arcade</div>
1408
+ <div class="tier-price" style="color: var(--neon-pink);">$29<span>/mo</span></div>
1409
+ <div class="tier-desc">Serious builders need serious tooling.</div>
1410
+ <ul class="tier-features">
1411
+ <li>Unlimited slides</li>
1412
+ <li>All atmospheric packs</li>
1413
+ <li>Live data binding</li>
1414
+ <li>Priority rendering</li>
1415
+ <li>Custom cursor sets</li>
1416
+ </ul>
1417
+ <button class="pixel-btn pink-btn" style="font-size: 0.8rem; padding: 12px 24px;">Select</button>
1418
+ </div>
1419
+ <div class="tier-card">
1420
+ <div class="tier-name">Boss</div>
1421
+ <div class="tier-price">$79<span>/mo</span></div>
1422
+ <div class="tier-desc">Enterprise-grade control and compliance.</div>
1423
+ <ul class="tier-features">
1424
+ <li>Everything in Arcade</li>
1425
+ <li>White-label export</li>
1426
+ <li>SSO & audit logs</li>
1427
+ <li>Dedicated pipeline</li>
1428
+ </ul>
1429
+ <button class="pixel-btn" style="font-size: 0.8rem; padding: 12px 24px;">Select</button>
1430
+ </div>
1431
+ </div>
1432
+ </div>
1433
+ </section>
1434
+
1435
+ <!-- ========== SLIDE 10: CLOSING CTA ========== -->
1436
+ <section class="slide bg-grid scanlines grain crt-glow" data-slide="10">
1437
+ <div class="starfield" id="starfield10"></div>
1438
+ <div class="pixel-particles" id="particles10"></div>
1439
+ <div class="pixel-landscape" id="landscape10"></div>
1440
+ <div class="slide-content" style="z-index:10;">
1441
+ <div class="cta-content">
1442
+ <h2>Ready Player<br>One?</h2>
1443
+ <p>Deploy your first 8-BIT ORBIT deck in under sixty seconds. No dependencies. No friction. Just pure presentation power.</p>
1444
+ <div class="cta-buttons">
1445
+ <button class="pixel-btn">Initialize Deck</button>
1446
+ <button class="pixel-btn pink-btn">View Documentation</button>
1447
+ </div>
1448
+ </div>
1449
+ </div>
1450
+ </section>
1451
+
1452
+ </div>
1453
+ </div>
1454
+
1455
+ <script>
1456
+ (function() {
1457
+ const totalSlides = 10;
1458
+ let currentSlide = 0;
1459
+ const container = document.getElementById('slidesContainer');
1460
+ const counter = document.getElementById('slideCounter');
1461
+ const dotsContainer = document.getElementById('navDots');
1462
+
1463
+ // Generate nav dots
1464
+ for (let i = 0; i < totalSlides; i++) {
1465
+ const dot = document.createElement('div');
1466
+ dot.className = 'nav-dot' + (i === 0 ? ' active' : '');
1467
+ dot.addEventListener('click', () => goToSlide(i));
1468
+ dotsContainer.appendChild(dot);
1469
+ }
1470
+
1471
+ const dots = document.querySelectorAll('.nav-dot');
1472
+
1473
+ function updateUI() {
1474
+ container.style.transform = `translateY(-${currentSlide * 100}vh)`;
1475
+ counter.textContent = String(currentSlide + 1).padStart(2, '0') + ' / ' + totalSlides;
1476
+ dots.forEach((d, i) => d.classList.toggle('active', i === currentSlide));
1477
+ triggerAnimations(currentSlide);
1478
+ }
1479
+
1480
+ function goToSlide(index) {
1481
+ if (index < 0 || index >= totalSlides) return;
1482
+ currentSlide = index;
1483
+ updateUI();
1484
+ }
1485
+
1486
+ function nextSlide() { goToSlide(currentSlide + 1); }
1487
+ function prevSlide() { goToSlide(currentSlide - 1); }
1488
+
1489
+ document.addEventListener('keydown', (e) => {
1490
+ if (e.key === 'ArrowDown' || e.key === 'ArrowRight' || e.key === ' ') {
1491
+ e.preventDefault();
1492
+ nextSlide();
1493
+ } else if (e.key === 'ArrowUp' || e.key === 'ArrowLeft') {
1494
+ e.preventDefault();
1495
+ prevSlide();
1496
+ } else if (e.key === 'Home') {
1497
+ e.preventDefault();
1498
+ goToSlide(0);
1499
+ } else if (e.key === 'End') {
1500
+ e.preventDefault();
1501
+ goToSlide(totalSlides - 1);
1502
+ }
1503
+ });
1504
+
1505
+ // Touch / swipe support
1506
+ let touchStartY = 0;
1507
+ document.addEventListener('touchstart', (e) => { touchStartY = e.touches[0].clientY; });
1508
+ document.addEventListener('touchend', (e) => {
1509
+ const diff = touchStartY - e.changedTouches[0].clientY;
1510
+ if (Math.abs(diff) > 50) {
1511
+ diff > 0 ? nextSlide() : prevSlide();
1512
+ }
1513
+ });
1514
+
1515
+ // Wheel support with debounce
1516
+ let wheelLock = false;
1517
+ document.addEventListener('wheel', (e) => {
1518
+ if (wheelLock) return;
1519
+ wheelLock = true;
1520
+ e.deltaY > 0 ? nextSlide() : prevSlide();
1521
+ setTimeout(() => wheelLock = false, 800);
1522
+ }, { passive: true });
1523
+
1524
+ // ===== ANIMATION TRIGGERS =====
1525
+ function triggerAnimations(slideIndex) {
1526
+ // Slide 4: Vertical bar chart
1527
+ if (slideIndex === 3) {
1528
+ document.querySelectorAll('#barChart .chart-bar').forEach((bar, i) => {
1529
+ const h = bar.dataset.height;
1530
+ setTimeout(() => {
1531
+ bar.style.height = h + '%';
1532
+ }, i * 120);
1533
+ });
1534
+ document.querySelectorAll('#barChart .chart-value').forEach((val, i) => {
1535
+ const target = parseInt(val.dataset.value);
1536
+ setTimeout(() => animateNumber(val, target, '', 800), i * 120);
1537
+ });
1538
+ } else {
1539
+ document.querySelectorAll('#barChart .chart-bar').forEach(bar => bar.style.height = '0%');
1540
+ }
1541
+
1542
+ // Slide 5: Horizontal bar chart
1543
+ if (slideIndex === 4) {
1544
+ document.querySelectorAll('#hbarChart .hbar-fill').forEach((fill, i) => {
1545
+ const w = fill.dataset.width;
1546
+ setTimeout(() => { fill.style.width = w + '%'; }, i * 100);
1547
+ });
1548
+ } else {
1549
+ document.querySelectorAll('#hbarChart .hbar-fill').forEach(fill => fill.style.width = '0%');
1550
+ }
1551
+
1552
+ // Slide 7: Stats counters
1553
+ if (slideIndex === 6) {
1554
+ document.querySelectorAll('#statsGrid .stat-number').forEach((el, i) => {
1555
+ const target = parseFloat(el.dataset.target);
1556
+ const suffix = el.dataset.suffix || '';
1557
+ const isFloat = target % 1 !== 0;
1558
+ setTimeout(() => animateNumber(el, target, suffix, 1200, isFloat), i * 150);
1559
+ });
1560
+ } else {
1561
+ document.querySelectorAll('#statsGrid .stat-number').forEach(el => el.textContent = '0');
1562
+ }
1563
+ }
1564
+
1565
+ function animateNumber(el, target, suffix, duration, isFloat = false) {
1566
+ const start = performance.now();
1567
+ function tick(now) {
1568
+ const progress = Math.min((now - start) / duration, 1);
1569
+ const eased = 1 - Math.pow(1 - progress, 3);
1570
+ const current = eased * target;
1571
+ el.textContent = (isFloat ? current.toFixed(1) : Math.floor(current)) + suffix;
1572
+ if (progress < 1) requestAnimationFrame(tick);
1573
+ else el.textContent = (isFloat ? target.toFixed(1) : target) + suffix;
1574
+ }
1575
+ requestAnimationFrame(tick);
1576
+ }
1577
+
1578
+ // ===== GENERATE STARFIELD =====
1579
+ function generateStars(containerId, count = 40) {
1580
+ const container = document.getElementById(containerId);
1581
+ if (!container) return;
1582
+ container.innerHTML = '';
1583
+ for (let i = 0; i < count; i++) {
1584
+ const star = document.createElement('div');
1585
+ star.className = 'star';
1586
+ star.style.left = Math.random() * 100 + '%';
1587
+ star.style.top = Math.random() * 100 + '%';
1588
+ star.style.animationDelay = Math.random() * 3 + 's';
1589
+ container.appendChild(star);
1590
+ }
1591
+ }
1592
+
1593
+ generateStars('starfield1', 50);
1594
+ generateStars('starfield4', 30);
1595
+ generateStars('starfield7', 35);
1596
+ generateStars('starfield10', 45);
1597
+
1598
+ // ===== GENERATE FLOATING PARTICLES =====
1599
+ function generateParticles(containerId, colors, count = 12) {
1600
+ const container = document.getElementById(containerId);
1601
+ if (!container) return;
1602
+ container.innerHTML = '';
1603
+ for (let i = 0; i < count; i++) {
1604
+ const p = document.createElement('div');
1605
+ p.className = 'p';
1606
+ const color = colors[i % colors.length];
1607
+ p.style.background = color;
1608
+ p.style.left = Math.random() * 100 + '%';
1609
+ p.style.top = Math.random() * 100 + '%';
1610
+ p.style.animationDelay = Math.random() * 5 + 's';
1611
+ p.style.animationDuration = (6 + Math.random() * 6) + 's';
1612
+ container.appendChild(p);
1613
+ }
1614
+ }
1615
+
1616
+ generateParticles('particles1', ['var(--neon-cyan)', 'var(--neon-pink)', 'var(--neon-yellow)'], 16);
1617
+ generateParticles('particles10', ['var(--neon-cyan)', 'var(--neon-pink)', 'var(--neon-yellow)'], 20);
1618
+
1619
+ // ===== GENERATE PIXEL LANDSCAPE FOR CTA =====
1620
+ function generateLandscape() {
1621
+ const container = document.getElementById('landscape10');
1622
+ if (!container) return;
1623
+ const heights = [30, 50, 70, 40, 60, 35, 55, 45, 80, 25, 50, 40];
1624
+ heights.forEach((h, i) => {
1625
+ const mtn = document.createElement('div');
1626
+ mtn.className = 'mountain';
1627
+ mtn.style.height = h + 'px';
1628
+ mtn.style.width = (60 + (i % 3) * 20) + 'px';
1629
+ container.appendChild(mtn);
1630
+ });
1631
+ }
1632
+ generateLandscape();
1633
+
1634
+ // Initialize
1635
+ updateUI();
1636
+ })();
1637
+ </script>
1638
+
1639
+ </body>
1640
+ </html>