@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.
- package/.env.example +4 -0
- package/AGENTS.md +34 -38
- package/ARCHITECTURE.md +4 -3
- package/LICENSE.md +14 -0
- package/README.md +52 -21
- package/config/hiai-opencode.schema.json +11 -13
- package/dist/agents/{bob.d.ts → bob/claude.d.ts} +6 -2
- package/dist/agents/bob/core.d.ts +6 -0
- package/dist/agents/bob/gpt.d.ts +11 -0
- package/dist/agents/bob/index.d.ts +3 -0
- package/dist/agents/coder/core.d.ts +4 -0
- package/dist/agents/coder/gpt.d.ts +1 -4
- package/dist/agents/coder/index.d.ts +1 -0
- package/dist/agents/manager/agent.d.ts +1 -1
- package/dist/agents/manager/default-prompt-sections.d.ts +3 -3
- package/dist/agents/manager/guard-integration.d.ts +1 -0
- package/dist/agents/prompt-library/index.d.ts +0 -1
- package/dist/agents/prompt-library/shared-execution.d.ts +9 -0
- package/dist/agents/strategist/behavioral-summary.d.ts +1 -1
- package/dist/agents/strategist/identity-constraints.d.ts +1 -1
- package/dist/agents/strategist/plan-generation.d.ts +1 -1
- package/dist/agents/types.d.ts +2 -1
- package/dist/config/defaults.d.ts +1 -0
- package/dist/config/platform-schema.d.ts +26 -26
- package/dist/config/schema/agent-names.d.ts +6 -6
- package/dist/config/schema/agent-overrides.d.ts +0 -128
- package/dist/config/schema/hiai-opencode-config.d.ts +0 -128
- package/dist/config/types.d.ts +2 -2
- package/dist/features/background-agent/manager-notifier.d.ts +46 -0
- package/dist/features/background-agent/manager-types.d.ts +40 -0
- package/dist/features/background-agent/manager.d.ts +3 -19
- package/dist/features/background-agent/polling-manager.d.ts +51 -0
- package/dist/features/boulder-state/storage.d.ts +1 -0
- package/dist/features/builtin-commands/templates/loop.d.ts +2 -0
- package/dist/features/builtin-commands/templates/start-work.d.ts +1 -1
- package/dist/features/builtin-skills/skills/interview-me.d.ts +2 -0
- package/dist/features/builtin-skills/skills/planning-and-task-breakdown.d.ts +2 -0
- package/dist/hooks/reasoning-content-cache/hook.d.ts +11 -0
- package/dist/hooks/reasoning-content-cache/index.d.ts +1 -0
- package/dist/hooks/session-recovery/checkpoint.d.ts +48 -0
- package/dist/hooks/session-recovery/enhanced-hook.d.ts +30 -0
- package/dist/hooks/session-recovery/state-backup.d.ts +76 -0
- package/dist/hooks/shared/compaction-in-progress.d.ts +4 -0
- package/dist/hooks/start-work/git-operations.d.ts +47 -0
- package/dist/hooks/token-budget.d.ts +30 -0
- package/dist/index.js +1185 -1078
- package/dist/mcp/rate-limiter.d.ts +68 -0
- package/dist/plugin/chat-message.d.ts +8 -0
- package/dist/plugin/command-execute-before.d.ts +1 -1
- package/dist/plugin/event-handlers/message-updated.d.ts +2 -0
- package/dist/plugin/event-handlers/session-error.d.ts +2 -0
- package/dist/plugin/event-handlers/session-status.d.ts +2 -0
- package/dist/plugin/event-handlers/types.d.ts +62 -0
- package/dist/plugin/event-handlers/utils.d.ts +11 -0
- package/dist/plugin/event.d.ts +1 -1
- package/dist/shared/data-path.d.ts +1 -1
- package/dist/shared/errors.d.ts +70 -0
- package/dist/shared/extract-session-id.d.ts +8 -0
- package/dist/shared/git-worktree/get-git-state-summary.d.ts +14 -0
- package/dist/shared/index.d.ts +67 -68
- package/dist/shared/internal-initiator-marker.d.ts +1 -1
- package/dist/shared/logger.d.ts +5 -1
- package/dist/shared/reasoning-content-cache.d.ts +68 -0
- package/dist/shared/safe-create-hook.d.ts +4 -4
- package/dist/tools/call-hiai-agent/constants.d.ts +2 -2
- package/dist/tools/delegate-task/sub-agent.d.ts +1 -1
- package/dist/tools/look-at/constants.d.ts +1 -1
- package/docs/architecture/bob-manager-architecture.md +244 -0
- package/docs/hiai-opencode/adr/ADR-001-agent-identity-section-injection.md +66 -0
- package/docs/hiai-opencode/adr/ADR-002-anti-loop-guard-priority.md +63 -0
- package/docs/hiai-opencode/adr/ADR-003-compaction-mechanism.md +71 -0
- package/docs/hiai-opencode/adr/ADR-004-session-recovery.md +76 -0
- package/docs/hiai-opencode/api.md +305 -0
- package/docs/hiai-opencode/hooks-architecture.md +225 -0
- package/docs/hiai-opencode/migration.md +209 -0
- package/docs/skill-discovery.md +288 -0
- package/package.json +1 -1
- package/skills/agent-browser/SKILL.md +193 -0
- package/skills/apple-hig/SKILL.md +43 -0
- package/skills/article-magazine/SKILL.md +46 -0
- package/skills/article-magazine/example.html +81 -0
- package/skills/article-magazine/example.md +38 -0
- package/skills/canvas-design/SKILL.md +45 -0
- package/skills/design-templates/audio-jingle/SKILL.md +132 -0
- package/skills/design-templates/audio-jingle/example.html +128 -0
- package/skills/design-templates/blog-post/SKILL.md +80 -0
- package/skills/design-templates/blog-post/example.html +80 -0
- package/skills/design-templates/clinical-case-report/SKILL.md +209 -0
- package/skills/design-templates/clinical-case-report/example.html +698 -0
- package/skills/design-templates/clinical-case-report/examples/example-stemi.html +698 -0
- package/skills/design-templates/clinical-case-report/references/case-formats.md +94 -0
- package/skills/design-templates/clinical-case-report/references/checklist.md +41 -0
- package/skills/design-templates/critique/SKILL.md +258 -0
- package/skills/design-templates/critique/example.html +671 -0
- package/skills/design-templates/dashboard/SKILL.md +76 -0
- package/skills/design-templates/dashboard/example.html +118 -0
- package/skills/design-templates/dating-web/SKILL.md +92 -0
- package/skills/design-templates/dating-web/example.html +265 -0
- package/skills/design-templates/dcf-valuation/SKILL.md +140 -0
- package/skills/design-templates/dcf-valuation/references/sector-wacc.md +42 -0
- package/skills/design-templates/digital-eguide/SKILL.md +94 -0
- package/skills/design-templates/digital-eguide/example.html +204 -0
- package/skills/design-templates/docs-page/SKILL.md +80 -0
- package/skills/design-templates/docs-page/example.html +122 -0
- package/skills/design-templates/email-marketing/SKILL.md +84 -0
- package/skills/design-templates/email-marketing/example.html +159 -0
- package/skills/design-templates/eng-runbook/SKILL.md +51 -0
- package/skills/design-templates/eng-runbook/example.html +250 -0
- package/skills/design-templates/finance-report/SKILL.md +61 -0
- package/skills/design-templates/finance-report/example.html +242 -0
- package/skills/design-templates/flowai-live-dashboard-template/SKILL.md +87 -0
- package/skills/design-templates/flowai-live-dashboard-template/assets/template.html +387 -0
- package/skills/design-templates/flowai-live-dashboard-template/example.html +13 -0
- package/skills/design-templates/flowai-live-dashboard-template/references/checklist.md +35 -0
- package/skills/design-templates/gamified-app/SKILL.md +108 -0
- package/skills/design-templates/gamified-app/example.html +292 -0
- package/skills/design-templates/github-dashboard/SKILL.md +130 -0
- package/skills/design-templates/github-dashboard/example.html +473 -0
- package/skills/design-templates/github-dashboard/references/README.md +10 -0
- package/skills/design-templates/github-dashboard/references/artifact-example.json +15 -0
- package/skills/design-templates/github-dashboard/references/example-data.json +138 -0
- package/skills/design-templates/github-dashboard/references/provenance-example.json +92 -0
- package/skills/design-templates/github-dashboard/references/template.html +473 -0
- package/skills/design-templates/guizang-ppt/LICENSE +21 -0
- package/skills/design-templates/guizang-ppt/README.en.md +119 -0
- package/skills/design-templates/guizang-ppt/README.md +120 -0
- package/skills/design-templates/guizang-ppt/README.pt-BR.md +121 -0
- package/skills/design-templates/guizang-ppt/SKILL.md +313 -0
- package/skills/design-templates/guizang-ppt/assets/example-slides.html +318 -0
- package/skills/design-templates/guizang-ppt/assets/template.html +647 -0
- package/skills/design-templates/guizang-ppt/references/checklist.md +265 -0
- package/skills/design-templates/guizang-ppt/references/components.md +363 -0
- package/skills/design-templates/guizang-ppt/references/layouts.md +630 -0
- package/skills/design-templates/guizang-ppt/references/styles.md +195 -0
- package/skills/design-templates/guizang-ppt/references/themes.md +122 -0
- package/skills/design-templates/hr-onboarding/SKILL.md +52 -0
- package/skills/design-templates/hr-onboarding/example.html +219 -0
- package/skills/design-templates/html-ppt/.clawscan-allow +12 -0
- package/skills/design-templates/html-ppt/LICENSE +21 -0
- package/skills/design-templates/html-ppt/README.md +234 -0
- package/skills/design-templates/html-ppt/README.pt-BR.md +239 -0
- package/skills/design-templates/html-ppt/README.zh-CN.md +238 -0
- package/skills/design-templates/html-ppt/SKILL.md +250 -0
- package/skills/design-templates/html-ppt/assets/animations/animations.css +138 -0
- package/skills/design-templates/html-ppt/assets/animations/fx/_util.js +63 -0
- package/skills/design-templates/html-ppt/assets/animations/fx/chain-react.js +41 -0
- package/skills/design-templates/html-ppt/assets/animations/fx/confetti-cannon.js +49 -0
- package/skills/design-templates/html-ppt/assets/animations/fx/constellation.js +44 -0
- package/skills/design-templates/html-ppt/assets/animations/fx/counter-explosion.js +58 -0
- package/skills/design-templates/html-ppt/assets/animations/fx/data-stream.js +45 -0
- package/skills/design-templates/html-ppt/assets/animations/fx/firework.js +51 -0
- package/skills/design-templates/html-ppt/assets/animations/fx/galaxy-swirl.js +33 -0
- package/skills/design-templates/html-ppt/assets/animations/fx/gradient-blob.js +39 -0
- package/skills/design-templates/html-ppt/assets/animations/fx/knowledge-graph.js +69 -0
- package/skills/design-templates/html-ppt/assets/animations/fx/letter-explode.js +50 -0
- package/skills/design-templates/html-ppt/assets/animations/fx/magnetic-field.js +40 -0
- package/skills/design-templates/html-ppt/assets/animations/fx/matrix-rain.js +33 -0
- package/skills/design-templates/html-ppt/assets/animations/fx/neural-net.js +75 -0
- package/skills/design-templates/html-ppt/assets/animations/fx/orbit-ring.js +38 -0
- package/skills/design-templates/html-ppt/assets/animations/fx/particle-burst.js +42 -0
- package/skills/design-templates/html-ppt/assets/animations/fx/shockwave.js +39 -0
- package/skills/design-templates/html-ppt/assets/animations/fx/sparkle-trail.js +62 -0
- package/skills/design-templates/html-ppt/assets/animations/fx/starfield.js +30 -0
- package/skills/design-templates/html-ppt/assets/animations/fx/typewriter-multi.js +51 -0
- package/skills/design-templates/html-ppt/assets/animations/fx/word-cascade.js +47 -0
- package/skills/design-templates/html-ppt/assets/animations/fx-runtime.js +99 -0
- package/skills/design-templates/html-ppt/assets/base.css +150 -0
- package/skills/design-templates/html-ppt/assets/fonts.css +9 -0
- package/skills/design-templates/html-ppt/assets/runtime.js +960 -0
- package/skills/design-templates/html-ppt/assets/themes/academic-paper.css +23 -0
- package/skills/design-templates/html-ppt/assets/themes/arctic-cool.css +14 -0
- package/skills/design-templates/html-ppt/assets/themes/aurora.css +20 -0
- package/skills/design-templates/html-ppt/assets/themes/bauhaus.css +16 -0
- package/skills/design-templates/html-ppt/assets/themes/blueprint.css +19 -0
- package/skills/design-templates/html-ppt/assets/themes/catppuccin-latte.css +14 -0
- package/skills/design-templates/html-ppt/assets/themes/catppuccin-mocha.css +14 -0
- package/skills/design-templates/html-ppt/assets/themes/corporate-clean.css +19 -0
- package/skills/design-templates/html-ppt/assets/themes/cyberpunk-neon.css +23 -0
- package/skills/design-templates/html-ppt/assets/themes/dracula.css +14 -0
- package/skills/design-templates/html-ppt/assets/themes/editorial-serif.css +18 -0
- package/skills/design-templates/html-ppt/assets/themes/engineering-whiteprint.css +26 -0
- package/skills/design-templates/html-ppt/assets/themes/glassmorphism.css +21 -0
- package/skills/design-templates/html-ppt/assets/themes/gruvbox-dark.css +14 -0
- package/skills/design-templates/html-ppt/assets/themes/japanese-minimal.css +21 -0
- package/skills/design-templates/html-ppt/assets/themes/magazine-bold.css +21 -0
- package/skills/design-templates/html-ppt/assets/themes/memphis-pop.css +20 -0
- package/skills/design-templates/html-ppt/assets/themes/midcentury.css +19 -0
- package/skills/design-templates/html-ppt/assets/themes/minimal-white.css +16 -0
- package/skills/design-templates/html-ppt/assets/themes/neo-brutalism.css +17 -0
- package/skills/design-templates/html-ppt/assets/themes/news-broadcast.css +20 -0
- package/skills/design-templates/html-ppt/assets/themes/nord.css +14 -0
- package/skills/design-templates/html-ppt/assets/themes/pitch-deck-vc.css +21 -0
- package/skills/design-templates/html-ppt/assets/themes/rainbow-gradient.css +16 -0
- package/skills/design-templates/html-ppt/assets/themes/retro-tv.css +22 -0
- package/skills/design-templates/html-ppt/assets/themes/rose-pine.css +14 -0
- package/skills/design-templates/html-ppt/assets/themes/sharp-mono.css +17 -0
- package/skills/design-templates/html-ppt/assets/themes/soft-pastel.css +14 -0
- package/skills/design-templates/html-ppt/assets/themes/solarized-light.css +14 -0
- package/skills/design-templates/html-ppt/assets/themes/sunset-warm.css +14 -0
- package/skills/design-templates/html-ppt/assets/themes/swiss-grid.css +17 -0
- package/skills/design-templates/html-ppt/assets/themes/terminal-green.css +18 -0
- package/skills/design-templates/html-ppt/assets/themes/tokyo-night.css +14 -0
- package/skills/design-templates/html-ppt/assets/themes/vaporwave.css +21 -0
- package/skills/design-templates/html-ppt/assets/themes/xiaohongshu-white.css +16 -0
- package/skills/design-templates/html-ppt/assets/themes/y2k-chrome.css +20 -0
- package/skills/design-templates/html-ppt/docs/readme/_theme-cell.html +56 -0
- package/skills/design-templates/html-ppt/docs/readme/animations.png +0 -0
- package/skills/design-templates/html-ppt/docs/readme/hero.gif +0 -0
- package/skills/design-templates/html-ppt/docs/readme/layouts-live.gif +0 -0
- package/skills/design-templates/html-ppt/docs/readme/layouts.png +0 -0
- package/skills/design-templates/html-ppt/docs/readme/montage-animations.html +61 -0
- package/skills/design-templates/html-ppt/docs/readme/montage-layouts.html +72 -0
- package/skills/design-templates/html-ppt/docs/readme/montage-templates.html +72 -0
- package/skills/design-templates/html-ppt/docs/readme/montage-themes.html +38 -0
- package/skills/design-templates/html-ppt/docs/readme/presenter-mode.png +0 -0
- package/skills/design-templates/html-ppt/docs/readme/templates.png +0 -0
- package/skills/design-templates/html-ppt/docs/readme/themes.png +0 -0
- package/skills/design-templates/html-ppt/examples/demo-deck/index.html +161 -0
- package/skills/design-templates/html-ppt/references/animations.md +147 -0
- package/skills/design-templates/html-ppt/references/authoring-guide.md +141 -0
- package/skills/design-templates/html-ppt/references/full-decks.md +98 -0
- package/skills/design-templates/html-ppt/references/layouts.md +103 -0
- package/skills/design-templates/html-ppt/references/presenter-mode.md +240 -0
- package/skills/design-templates/html-ppt/references/themes.md +107 -0
- package/skills/design-templates/html-ppt/scripts/new-deck.sh +46 -0
- package/skills/design-templates/html-ppt/scripts/render.sh +71 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_01.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_02.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_03.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_04.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_05.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_06.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_07.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_08.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_09.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_10.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_11.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_12.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_13.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_14.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_15.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_16.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_17.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_18.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_19.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/animation-showcase/animation-showcase_20.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_01.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_02.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_03.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_04.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_05.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_06.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_07.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_08.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_09.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_10.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_11.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_12.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_13.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_14.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_15.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_16.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_17.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_18.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_19.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_20.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_21.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_22.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_23.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_24.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_25.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_26.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_27.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_28.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_29.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_30.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_31.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_32.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_33.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_34.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_35.png +0 -0
- package/skills/design-templates/html-ppt/scripts/verify-output/theme-showcase/theme-showcase_36.png +0 -0
- package/skills/design-templates/html-ppt/templates/animation-showcase.html +172 -0
- package/skills/design-templates/html-ppt/templates/deck.html +69 -0
- package/skills/design-templates/html-ppt/templates/full-decks/course-module/README.md +8 -0
- package/skills/design-templates/html-ppt/templates/full-decks/course-module/index.html +189 -0
- package/skills/design-templates/html-ppt/templates/full-decks/course-module/style.css +46 -0
- package/skills/design-templates/html-ppt/templates/full-decks/dir-key-nav-minimal/README.md +11 -0
- package/skills/design-templates/html-ppt/templates/full-decks/dir-key-nav-minimal/index.html +138 -0
- package/skills/design-templates/html-ppt/templates/full-decks/dir-key-nav-minimal/style.css +60 -0
- package/skills/design-templates/html-ppt/templates/full-decks/graphify-dark-graph/README.md +11 -0
- package/skills/design-templates/html-ppt/templates/full-decks/graphify-dark-graph/index.html +180 -0
- package/skills/design-templates/html-ppt/templates/full-decks/graphify-dark-graph/style.css +54 -0
- package/skills/design-templates/html-ppt/templates/full-decks/hermes-cyber-terminal/README.md +11 -0
- package/skills/design-templates/html-ppt/templates/full-decks/hermes-cyber-terminal/index.html +199 -0
- package/skills/design-templates/html-ppt/templates/full-decks/hermes-cyber-terminal/style.css +55 -0
- package/skills/design-templates/html-ppt/templates/full-decks/knowledge-arch-blueprint/README.md +11 -0
- package/skills/design-templates/html-ppt/templates/full-decks/knowledge-arch-blueprint/index.html +190 -0
- package/skills/design-templates/html-ppt/templates/full-decks/knowledge-arch-blueprint/style.css +49 -0
- package/skills/design-templates/html-ppt/templates/full-decks/obsidian-claude-gradient/README.md +11 -0
- package/skills/design-templates/html-ppt/templates/full-decks/obsidian-claude-gradient/index.html +144 -0
- package/skills/design-templates/html-ppt/templates/full-decks/obsidian-claude-gradient/style.css +59 -0
- package/skills/design-templates/html-ppt/templates/full-decks/pitch-deck/README.md +9 -0
- package/skills/design-templates/html-ppt/templates/full-decks/pitch-deck/index.html +148 -0
- package/skills/design-templates/html-ppt/templates/full-decks/pitch-deck/style.css +40 -0
- package/skills/design-templates/html-ppt/templates/full-decks/presenter-mode-reveal/README.md +102 -0
- package/skills/design-templates/html-ppt/templates/full-decks/presenter-mode-reveal/index.html +187 -0
- package/skills/design-templates/html-ppt/templates/full-decks/presenter-mode-reveal/style.css +216 -0
- package/skills/design-templates/html-ppt/templates/full-decks/product-launch/README.md +8 -0
- package/skills/design-templates/html-ppt/templates/full-decks/product-launch/index.html +121 -0
- package/skills/design-templates/html-ppt/templates/full-decks/product-launch/style.css +39 -0
- package/skills/design-templates/html-ppt/templates/full-decks/tech-sharing/README.md +8 -0
- package/skills/design-templates/html-ppt/templates/full-decks/tech-sharing/index.html +156 -0
- package/skills/design-templates/html-ppt/templates/full-decks/tech-sharing/style.css +49 -0
- package/skills/design-templates/html-ppt/templates/full-decks/testing-safety-alert/README.md +11 -0
- package/skills/design-templates/html-ppt/templates/full-decks/testing-safety-alert/index.html +183 -0
- package/skills/design-templates/html-ppt/templates/full-decks/testing-safety-alert/style.css +62 -0
- package/skills/design-templates/html-ppt/templates/full-decks/weekly-report/README.md +8 -0
- package/skills/design-templates/html-ppt/templates/full-decks/weekly-report/index.html +127 -0
- package/skills/design-templates/html-ppt/templates/full-decks/weekly-report/style.css +55 -0
- package/skills/design-templates/html-ppt/templates/full-decks/xhs-pastel-card/README.md +11 -0
- package/skills/design-templates/html-ppt/templates/full-decks/xhs-pastel-card/index.html +147 -0
- package/skills/design-templates/html-ppt/templates/full-decks/xhs-pastel-card/style.css +66 -0
- package/skills/design-templates/html-ppt/templates/full-decks/xhs-post/README.md +9 -0
- package/skills/design-templates/html-ppt/templates/full-decks/xhs-post/index.html +133 -0
- package/skills/design-templates/html-ppt/templates/full-decks/xhs-post/style.css +47 -0
- package/skills/design-templates/html-ppt/templates/full-decks/xhs-white-editorial/README.md +11 -0
- package/skills/design-templates/html-ppt/templates/full-decks/xhs-white-editorial/index.html +187 -0
- package/skills/design-templates/html-ppt/templates/full-decks/xhs-white-editorial/style.css +63 -0
- package/skills/design-templates/html-ppt/templates/full-decks-index.html +82 -0
- package/skills/design-templates/html-ppt/templates/layout-showcase.html +47 -0
- package/skills/design-templates/html-ppt/templates/single-page/arch-diagram.html +46 -0
- package/skills/design-templates/html-ppt/templates/single-page/big-quote.html +18 -0
- package/skills/design-templates/html-ppt/templates/single-page/bullets.html +19 -0
- package/skills/design-templates/html-ppt/templates/single-page/chart-bar.html +30 -0
- package/skills/design-templates/html-ppt/templates/single-page/chart-line.html +35 -0
- package/skills/design-templates/html-ppt/templates/single-page/chart-pie.html +36 -0
- package/skills/design-templates/html-ppt/templates/single-page/chart-radar.html +31 -0
- package/skills/design-templates/html-ppt/templates/single-page/code.html +33 -0
- package/skills/design-templates/html-ppt/templates/single-page/comparison.html +47 -0
- package/skills/design-templates/html-ppt/templates/single-page/cover.html +32 -0
- package/skills/design-templates/html-ppt/templates/single-page/cta.html +27 -0
- package/skills/design-templates/html-ppt/templates/single-page/diff.html +35 -0
- package/skills/design-templates/html-ppt/templates/single-page/flow-diagram.html +33 -0
- package/skills/design-templates/html-ppt/templates/single-page/gantt.html +29 -0
- package/skills/design-templates/html-ppt/templates/single-page/image-grid.html +34 -0
- package/skills/design-templates/html-ppt/templates/single-page/image-hero.html +33 -0
- package/skills/design-templates/html-ppt/templates/single-page/kpi-grid.html +19 -0
- package/skills/design-templates/html-ppt/templates/single-page/mindmap.html +38 -0
- package/skills/design-templates/html-ppt/templates/single-page/process-steps.html +27 -0
- package/skills/design-templates/html-ppt/templates/single-page/pros-cons.html +31 -0
- package/skills/design-templates/html-ppt/templates/single-page/roadmap.html +46 -0
- package/skills/design-templates/html-ppt/templates/single-page/section-divider.html +17 -0
- package/skills/design-templates/html-ppt/templates/single-page/stat-highlight.html +17 -0
- package/skills/design-templates/html-ppt/templates/single-page/table.html +33 -0
- package/skills/design-templates/html-ppt/templates/single-page/terminal.html +35 -0
- package/skills/design-templates/html-ppt/templates/single-page/thanks.html +21 -0
- package/skills/design-templates/html-ppt/templates/single-page/three-column.html +18 -0
- package/skills/design-templates/html-ppt/templates/single-page/timeline.html +32 -0
- package/skills/design-templates/html-ppt/templates/single-page/toc.html +26 -0
- package/skills/design-templates/html-ppt/templates/single-page/todo-checklist.html +33 -0
- package/skills/design-templates/html-ppt/templates/single-page/two-column.html +39 -0
- package/skills/design-templates/html-ppt/templates/theme-showcase.html +151 -0
- package/skills/design-templates/html-ppt-course-module/SKILL.md +78 -0
- package/skills/design-templates/html-ppt-course-module/example.html +542 -0
- package/skills/design-templates/html-ppt-dir-key-nav-minimal/SKILL.md +77 -0
- package/skills/design-templates/html-ppt-dir-key-nav-minimal/example.html +366 -0
- package/skills/design-templates/html-ppt-graphify-dark-graph/SKILL.md +77 -0
- package/skills/design-templates/html-ppt-graphify-dark-graph/example.html +402 -0
- package/skills/design-templates/html-ppt-hermes-cyber-terminal/SKILL.md +77 -0
- package/skills/design-templates/html-ppt-hermes-cyber-terminal/example.html +422 -0
- package/skills/design-templates/html-ppt-knowledge-arch-blueprint/SKILL.md +77 -0
- package/skills/design-templates/html-ppt-knowledge-arch-blueprint/example.html +407 -0
- package/skills/design-templates/html-ppt-obsidian-claude-gradient/SKILL.md +77 -0
- package/skills/design-templates/html-ppt-obsidian-claude-gradient/example.html +371 -0
- package/skills/design-templates/html-ppt-pitch-deck/SKILL.md +78 -0
- package/skills/design-templates/html-ppt-pitch-deck/example.html +495 -0
- package/skills/design-templates/html-ppt-presenter-mode-reveal/SKILL.md +78 -0
- package/skills/design-templates/html-ppt-presenter-mode-reveal/example.html +725 -0
- package/skills/design-templates/html-ppt-product-launch/SKILL.md +77 -0
- package/skills/design-templates/html-ppt-product-launch/example.html +467 -0
- package/skills/design-templates/html-ppt-taste-brutalist/SKILL.md +70 -0
- package/skills/design-templates/html-ppt-taste-brutalist/example.html +774 -0
- package/skills/design-templates/html-ppt-taste-editorial/SKILL.md +62 -0
- package/skills/design-templates/html-ppt-taste-editorial/example.html +689 -0
- package/skills/design-templates/html-ppt-tech-sharing/SKILL.md +77 -0
- package/skills/design-templates/html-ppt-tech-sharing/example.html +512 -0
- package/skills/design-templates/html-ppt-testing-safety-alert/SKILL.md +78 -0
- package/skills/design-templates/html-ppt-testing-safety-alert/example.html +413 -0
- package/skills/design-templates/html-ppt-weekly-report/SKILL.md +77 -0
- package/skills/design-templates/html-ppt-weekly-report/example.html +489 -0
- package/skills/design-templates/html-ppt-xhs-pastel-card/SKILL.md +78 -0
- package/skills/design-templates/html-ppt-xhs-pastel-card/example.html +381 -0
- package/skills/design-templates/html-ppt-xhs-post/SKILL.md +78 -0
- package/skills/design-templates/html-ppt-xhs-post/example.html +487 -0
- package/skills/design-templates/html-ppt-xhs-white-editorial/SKILL.md +77 -0
- package/skills/design-templates/html-ppt-xhs-white-editorial/example.html +418 -0
- package/skills/design-templates/html-ppt-zhangzara-8-bit-orbit/LICENSE +21 -0
- package/skills/design-templates/html-ppt-zhangzara-8-bit-orbit/SKILL.md +93 -0
- package/skills/design-templates/html-ppt-zhangzara-8-bit-orbit/example.html +1640 -0
- package/skills/design-templates/html-ppt-zhangzara-8-bit-orbit/template.json +48 -0
- package/skills/design-templates/html-ppt-zhangzara-biennale-yellow/LICENSE +21 -0
- package/skills/design-templates/html-ppt-zhangzara-biennale-yellow/SKILL.md +93 -0
- package/skills/design-templates/html-ppt-zhangzara-biennale-yellow/example.html +833 -0
- package/skills/design-templates/html-ppt-zhangzara-biennale-yellow/template.json +49 -0
- package/skills/design-templates/html-ppt-zhangzara-block-frame/LICENSE +21 -0
- package/skills/design-templates/html-ppt-zhangzara-block-frame/SKILL.md +93 -0
- package/skills/design-templates/html-ppt-zhangzara-block-frame/example.html +1453 -0
- package/skills/design-templates/html-ppt-zhangzara-block-frame/template.json +47 -0
- package/skills/design-templates/html-ppt-zhangzara-blue-professional/LICENSE +21 -0
- package/skills/design-templates/html-ppt-zhangzara-blue-professional/SKILL.md +93 -0
- package/skills/design-templates/html-ppt-zhangzara-blue-professional/example.html +1423 -0
- package/skills/design-templates/html-ppt-zhangzara-blue-professional/template.json +44 -0
- package/skills/design-templates/html-ppt-zhangzara-bold-poster/LICENSE +21 -0
- package/skills/design-templates/html-ppt-zhangzara-bold-poster/SKILL.md +93 -0
- package/skills/design-templates/html-ppt-zhangzara-bold-poster/example.html +876 -0
- package/skills/design-templates/html-ppt-zhangzara-bold-poster/template.json +45 -0
- package/skills/design-templates/html-ppt-zhangzara-broadside/LICENSE +21 -0
- package/skills/design-templates/html-ppt-zhangzara-broadside/SKILL.md +92 -0
- package/skills/design-templates/html-ppt-zhangzara-broadside/example.html +2144 -0
- package/skills/design-templates/html-ppt-zhangzara-broadside/template.json +49 -0
- package/skills/design-templates/html-ppt-zhangzara-capsule/LICENSE +21 -0
- package/skills/design-templates/html-ppt-zhangzara-capsule/SKILL.md +92 -0
- package/skills/design-templates/html-ppt-zhangzara-capsule/example.html +1413 -0
- package/skills/design-templates/html-ppt-zhangzara-capsule/template.json +51 -0
- package/skills/design-templates/html-ppt-zhangzara-cartesian/LICENSE +21 -0
- package/skills/design-templates/html-ppt-zhangzara-cartesian/SKILL.md +92 -0
- package/skills/design-templates/html-ppt-zhangzara-cartesian/example.html +1136 -0
- package/skills/design-templates/html-ppt-zhangzara-cartesian/template.json +47 -0
- package/skills/design-templates/html-ppt-zhangzara-cobalt-grid/LICENSE +21 -0
- package/skills/design-templates/html-ppt-zhangzara-cobalt-grid/SKILL.md +93 -0
- package/skills/design-templates/html-ppt-zhangzara-cobalt-grid/example.html +1205 -0
- package/skills/design-templates/html-ppt-zhangzara-cobalt-grid/template.json +49 -0
- package/skills/design-templates/html-ppt-zhangzara-coral/LICENSE +21 -0
- package/skills/design-templates/html-ppt-zhangzara-coral/SKILL.md +92 -0
- package/skills/design-templates/html-ppt-zhangzara-coral/example.html +1487 -0
- package/skills/design-templates/html-ppt-zhangzara-coral/template.json +45 -0
- package/skills/design-templates/html-ppt-zhangzara-creative-mode/LICENSE +21 -0
- package/skills/design-templates/html-ppt-zhangzara-creative-mode/SKILL.md +99 -0
- package/skills/design-templates/html-ppt-zhangzara-creative-mode/assets/deck-stage.js +619 -0
- package/skills/design-templates/html-ppt-zhangzara-creative-mode/example.html +636 -0
- package/skills/design-templates/html-ppt-zhangzara-creative-mode/template.json +47 -0
- package/skills/design-templates/html-ppt-zhangzara-daisy-days/LICENSE +21 -0
- package/skills/design-templates/html-ppt-zhangzara-daisy-days/SKILL.md +93 -0
- package/skills/design-templates/html-ppt-zhangzara-daisy-days/example.html +469 -0
- package/skills/design-templates/html-ppt-zhangzara-daisy-days/template.json +54 -0
- package/skills/design-templates/html-ppt-zhangzara-editorial-tri-tone/LICENSE +21 -0
- package/skills/design-templates/html-ppt-zhangzara-editorial-tri-tone/SKILL.md +98 -0
- package/skills/design-templates/html-ppt-zhangzara-editorial-tri-tone/assets/deck-stage.js +619 -0
- package/skills/design-templates/html-ppt-zhangzara-editorial-tri-tone/example.html +737 -0
- package/skills/design-templates/html-ppt-zhangzara-editorial-tri-tone/template.json +44 -0
- package/skills/design-templates/html-ppt-zhangzara-grove/LICENSE +21 -0
- package/skills/design-templates/html-ppt-zhangzara-grove/SKILL.md +92 -0
- package/skills/design-templates/html-ppt-zhangzara-grove/example.html +1676 -0
- package/skills/design-templates/html-ppt-zhangzara-grove/template.json +51 -0
- package/skills/figma-code-connect-components/SKILL.md +42 -0
- package/skills/figma-create-design-system-rules/SKILL.md +42 -0
- package/skills/figma-create-new-file/SKILL.md +41 -0
- package/skills/figma-generate-design/SKILL.md +42 -0
- package/skills/figma-generate-library/SKILL.md +42 -0
- package/skills/figma-implement-design/SKILL.md +42 -0
- package/skills/figma-use/SKILL.md +42 -0
- package/skills/full-page-screenshot/SKILL.md +42 -0
- package/skills/interview-me/SKILL.md +64 -0
- package/skills/planning-and-task-breakdown/SKILL.md +52 -0
- package/skills/sora/SKILL.md +43 -0
- package/skills/theme-factory/SKILL.md +43 -0
- package/skills/web-design-guidelines/SKILL.md +42 -0
- package/dist/agents/prompt-library/orchestration.d.ts +0 -4
- package/skills/brainstorming/SKILL.md +0 -164
- package/skills/brainstorming/scripts/frame-template.html +0 -214
- package/skills/brainstorming/scripts/helper.js +0 -88
- package/skills/brainstorming/scripts/server.cjs +0 -354
- package/skills/brainstorming/scripts/start-server.sh +0 -148
- package/skills/brainstorming/scripts/stop-server.sh +0 -56
- package/skills/brainstorming/spec-document-reviewer-prompt.md +0 -49
- package/skills/brainstorming/visual-companion.md +0 -287
|
@@ -0,0 +1,542 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
|
5
|
+
<title>Module 04 · Recursion · CS101</title>
|
|
6
|
+
<style>/* html-ppt :: shared webfonts */
|
|
7
|
+
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@200;300;400;500;600;700;800;900&display=swap');
|
|
8
|
+
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@200;300;400;500;600;700;900&display=swap');
|
|
9
|
+
@import url('https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@300;400;600;700&display=swap');
|
|
10
|
+
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700&display=swap');
|
|
11
|
+
@import url('https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,600;0,800;1,400&display=swap');
|
|
12
|
+
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&display=swap');
|
|
13
|
+
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@300;400;500;700&display=swap');
|
|
14
|
+
@import url('https://fonts.googleapis.com/css2?family=Archivo+Black&display=swap');
|
|
15
|
+
|
|
16
|
+
</style>
|
|
17
|
+
<style>/* html-ppt :: base.css — reset + shared tokens + layout primitives */
|
|
18
|
+
/* Default tokens. Themes in assets/themes/*.css override the :root block. */
|
|
19
|
+
:root {
|
|
20
|
+
--bg: #ffffff;
|
|
21
|
+
--bg-soft: #f7f7f8;
|
|
22
|
+
--surface: #ffffff;
|
|
23
|
+
--surface-2: #f2f2f4;
|
|
24
|
+
--border: rgba(0,0,0,.08);
|
|
25
|
+
--border-strong: rgba(0,0,0,.16);
|
|
26
|
+
--text-1: #111216;
|
|
27
|
+
--text-2: #55596a;
|
|
28
|
+
--text-3: #8a8f9e;
|
|
29
|
+
--accent: #3b6cff;
|
|
30
|
+
--accent-2: #7a5cff;
|
|
31
|
+
--accent-3: #ff5c8a;
|
|
32
|
+
--good: #1aaf6c;
|
|
33
|
+
--warn: #f5a524;
|
|
34
|
+
--bad: #e0445a;
|
|
35
|
+
--grad: linear-gradient(135deg,#3b6cff,#7a5cff 55%,#ff5c8a);
|
|
36
|
+
--grad-soft: linear-gradient(135deg,#eef2ff,#f5ecff 55%,#ffeef5);
|
|
37
|
+
--radius: 18px;
|
|
38
|
+
--radius-sm: 12px;
|
|
39
|
+
--radius-lg: 26px;
|
|
40
|
+
--shadow: 0 10px 30px rgba(18,24,40,.08), 0 2px 6px rgba(18,24,40,.04);
|
|
41
|
+
--shadow-lg: 0 24px 60px rgba(18,24,40,.14), 0 6px 16px rgba(18,24,40,.06);
|
|
42
|
+
--font-sans: 'Inter','Noto Sans SC',-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;
|
|
43
|
+
--font-serif: 'Playfair Display','Noto Serif SC',Georgia,serif;
|
|
44
|
+
--font-mono: 'JetBrains Mono','IBM Plex Mono',SFMono-Regular,Menlo,monospace;
|
|
45
|
+
--font-display: var(--font-sans);
|
|
46
|
+
--letter-tight: -.03em;
|
|
47
|
+
--letter-normal: -.01em;
|
|
48
|
+
--ease: cubic-bezier(.4,0,.2,1);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
*,*::before,*::after{box-sizing:border-box}
|
|
52
|
+
html,body{margin:0;padding:0;background:var(--bg);color:var(--text-1);
|
|
53
|
+
font-family:var(--font-sans);font-weight:400;line-height:1.6;
|
|
54
|
+
-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
|
|
55
|
+
letter-spacing:var(--letter-normal)}
|
|
56
|
+
img,svg,video{max-width:100%;display:block}
|
|
57
|
+
a{color:var(--accent);text-decoration:none}
|
|
58
|
+
a:hover{text-decoration:underline}
|
|
59
|
+
code,kbd,pre,samp{font-family:var(--font-mono)}
|
|
60
|
+
|
|
61
|
+
/* ================= SLIDE SYSTEM ================= */
|
|
62
|
+
.deck{position:relative;width:100vw;height:100vh;overflow:hidden;background:var(--bg)}
|
|
63
|
+
.slide{
|
|
64
|
+
position:absolute;inset:0;
|
|
65
|
+
display:flex;flex-direction:column;justify-content:center;
|
|
66
|
+
padding:72px 96px;
|
|
67
|
+
box-sizing:border-box;
|
|
68
|
+
opacity:0;pointer-events:none;
|
|
69
|
+
transition:opacity .5s var(--ease), transform .5s var(--ease);
|
|
70
|
+
transform:translateX(30px);
|
|
71
|
+
overflow:hidden;
|
|
72
|
+
}
|
|
73
|
+
.slide.is-active{opacity:1;pointer-events:auto;transform:translateX(0);z-index:2}
|
|
74
|
+
.slide.is-prev{transform:translateX(-30px)}
|
|
75
|
+
|
|
76
|
+
/* single-page standalone (used when a layout file is opened directly) */
|
|
77
|
+
body.single .slide{position:relative;width:100vw;height:100vh;opacity:1;transform:none;pointer-events:auto}
|
|
78
|
+
|
|
79
|
+
/* ================= TYPOGRAPHY ================= */
|
|
80
|
+
.eyebrow{font-size:13px;font-weight:500;letter-spacing:.16em;text-transform:uppercase;color:var(--text-3)}
|
|
81
|
+
.kicker{font-size:14px;font-weight:600;color:var(--accent);letter-spacing:.08em;text-transform:uppercase}
|
|
82
|
+
h1.title,.h1{font-family:var(--font-display);font-size:72px;line-height:1.05;font-weight:800;letter-spacing:var(--letter-tight);margin:0 0 18px;color:var(--text-1)}
|
|
83
|
+
h2.title,.h2{font-family:var(--font-display);font-size:54px;line-height:1.1;font-weight:700;letter-spacing:var(--letter-tight);margin:0 0 14px}
|
|
84
|
+
h3,.h3{font-size:32px;line-height:1.2;font-weight:600;letter-spacing:var(--letter-normal);margin:0 0 10px}
|
|
85
|
+
h4,.h4{font-size:22px;line-height:1.3;font-weight:600;margin:0 0 8px}
|
|
86
|
+
.lede{font-size:22px;line-height:1.55;color:var(--text-2);font-weight:300;max-width:62ch}
|
|
87
|
+
.dim{color:var(--text-2)}
|
|
88
|
+
.dim2{color:var(--text-3)}
|
|
89
|
+
.mono{font-family:var(--font-mono)}
|
|
90
|
+
.serif{font-family:var(--font-serif)}
|
|
91
|
+
.gradient-text{background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}
|
|
92
|
+
|
|
93
|
+
/* ================= LAYOUT PRIMITIVES ================= */
|
|
94
|
+
.stack>*+*{margin-top:14px}
|
|
95
|
+
.row{display:flex;gap:24px;align-items:center}
|
|
96
|
+
.row.wrap{flex-wrap:wrap}
|
|
97
|
+
.grid{display:grid;gap:24px}
|
|
98
|
+
.g2{grid-template-columns:repeat(2,1fr)}
|
|
99
|
+
.g3{grid-template-columns:repeat(3,1fr)}
|
|
100
|
+
.g4{grid-template-columns:repeat(4,1fr)}
|
|
101
|
+
.center{display:flex;align-items:center;justify-content:center;text-align:center}
|
|
102
|
+
.fill{flex:1}
|
|
103
|
+
.sp-t{padding-top:24px}.sp-b{padding-bottom:24px}
|
|
104
|
+
.mt-s{margin-top:8px}.mt-m{margin-top:18px}.mt-l{margin-top:32px}
|
|
105
|
+
.mb-s{margin-bottom:8px}.mb-m{margin-bottom:18px}.mb-l{margin-bottom:32px}
|
|
106
|
+
|
|
107
|
+
/* ================= CARDS ================= */
|
|
108
|
+
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);
|
|
109
|
+
padding:26px 28px;box-shadow:var(--shadow);position:relative;overflow:hidden}
|
|
110
|
+
.card-soft{background:var(--surface-2);border:1px solid var(--border)}
|
|
111
|
+
.card-outline{background:transparent;border:1.5px solid var(--border-strong);box-shadow:none}
|
|
112
|
+
.card-accent{background:var(--surface);border-top:3px solid var(--accent)}
|
|
113
|
+
.card-hover{transition:transform .3s var(--ease),box-shadow .3s var(--ease)}
|
|
114
|
+
.card-hover:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg)}
|
|
115
|
+
|
|
116
|
+
.pill{display:inline-block;padding:4px 12px;border-radius:999px;font-size:12px;font-weight:500;
|
|
117
|
+
background:var(--surface-2);color:var(--text-2);border:1px solid var(--border)}
|
|
118
|
+
.pill-accent{background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent);border-color:color-mix(in srgb,var(--accent) 28%,transparent)}
|
|
119
|
+
|
|
120
|
+
/* ================= BARS / DIVIDERS ================= */
|
|
121
|
+
.divider{height:1px;background:var(--border);width:100%}
|
|
122
|
+
.divider-accent{height:3px;width:72px;background:var(--accent);border-radius:2px}
|
|
123
|
+
|
|
124
|
+
/* ================= CHROME (header/footer/progress) ================= */
|
|
125
|
+
.deck-header{position:absolute;top:24px;left:40px;right:40px;display:flex;align-items:center;justify-content:space-between;
|
|
126
|
+
font-size:12px;color:var(--text-3);letter-spacing:.12em;text-transform:uppercase;z-index:10;pointer-events:none}
|
|
127
|
+
.deck-footer{position:absolute;bottom:24px;left:40px;right:40px;display:flex;align-items:center;justify-content:space-between;
|
|
128
|
+
font-size:12px;color:var(--text-3);z-index:10;pointer-events:none}
|
|
129
|
+
.slide-number::before{content:attr(data-current)}
|
|
130
|
+
.slide-number::after{content:" / " attr(data-total)}
|
|
131
|
+
.progress-bar{position:fixed;left:0;right:0;bottom:0;height:3px;background:transparent;z-index:20}
|
|
132
|
+
.progress-bar > span{display:block;height:100%;width:0;background:var(--accent);transition:width .3s var(--ease)}
|
|
133
|
+
|
|
134
|
+
/* ================= PRESENTER / OVERVIEW ================= */
|
|
135
|
+
.notes{display:none!important}
|
|
136
|
+
.notes-overlay{position:fixed;inset:auto 0 0 0;max-height:42vh;background:rgba(20,22,30,.95);color:#e8ebf4;
|
|
137
|
+
padding:20px 32px;font-size:16px;line-height:1.6;border-top:1px solid rgba(255,255,255,.1);transform:translateY(100%);
|
|
138
|
+
transition:transform .3s var(--ease);z-index:40;overflow:auto;font-family:var(--font-sans)}
|
|
139
|
+
.notes-overlay.open{transform:translateY(0)}
|
|
140
|
+
.overview{position:fixed;inset:0;background:rgba(10,12,18,.92);backdrop-filter:blur(12px);z-index:50;
|
|
141
|
+
display:none;padding:40px;overflow:auto}
|
|
142
|
+
.overview.open{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;align-content:start}
|
|
143
|
+
.overview .thumb{background:var(--surface);border:1px solid var(--border);border-radius:12px;
|
|
144
|
+
aspect-ratio:16/9;overflow:hidden;cursor:pointer;position:relative;color:var(--text-1);padding:16px;
|
|
145
|
+
font-size:11px;transition:transform .2s var(--ease)}
|
|
146
|
+
.overview .thumb:hover{transform:scale(1.04)}
|
|
147
|
+
.overview .thumb .n{position:absolute;top:8px;left:10px;font-weight:700;font-size:14px;color:var(--text-3)}
|
|
148
|
+
.overview .thumb .t{position:absolute;bottom:10px;left:14px;right:14px;font-weight:600;color:var(--text-1)}
|
|
149
|
+
|
|
150
|
+
/* ================= PRESENTER VIEW ================= */
|
|
151
|
+
/* Presenter view opens in a separate popup window (S key).
|
|
152
|
+
* All presenter styles are self-contained in the popup HTML generated by runtime.js.
|
|
153
|
+
* The audience window (this file) is NOT affected — it stays as normal deck view.
|
|
154
|
+
* Only the .notes class below is needed to hide speaker notes from audience. */
|
|
155
|
+
|
|
156
|
+
/* ================= UTILITY ================= */
|
|
157
|
+
.hidden{display:none!important}
|
|
158
|
+
.nowrap{white-space:nowrap}
|
|
159
|
+
.tr{text-align:right}.tc{text-align:center}.tl{text-align:left}
|
|
160
|
+
.uppercase{text-transform:uppercase;letter-spacing:.12em}
|
|
161
|
+
|
|
162
|
+
/* ================= PRINT ================= */
|
|
163
|
+
@media print{
|
|
164
|
+
.slide{position:relative;opacity:1!important;transform:none!important;page-break-after:always;height:100vh}
|
|
165
|
+
.deck-header,.deck-footer,.progress-bar,.notes-overlay,.overview{display:none!important}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
</style>
|
|
169
|
+
<style>/* html-ppt :: animations.css
|
|
170
|
+
* Apply by adding class="anim-<name>" or data-anim="<name>".
|
|
171
|
+
* Durations are deliberately snappy; tweak --anim-dur per element.
|
|
172
|
+
*/
|
|
173
|
+
:root{--anim-dur:.7s;--anim-ease:cubic-bezier(.4,0,.2,1)}
|
|
174
|
+
|
|
175
|
+
/* ---------- FADE DIRECTIONALS ---------- */
|
|
176
|
+
@keyframes kf-fade-up{from{opacity:0;transform:translateY(32px)}to{opacity:1;transform:none}}
|
|
177
|
+
@keyframes kf-fade-down{from{opacity:0;transform:translateY(-32px)}to{opacity:1;transform:none}}
|
|
178
|
+
@keyframes kf-fade-left{from{opacity:0;transform:translateX(-40px)}to{opacity:1;transform:none}}
|
|
179
|
+
@keyframes kf-fade-right{from{opacity:0;transform:translateX(40px)}to{opacity:1;transform:none}}
|
|
180
|
+
.anim-fade-up{animation:kf-fade-up var(--anim-dur) var(--anim-ease) both}
|
|
181
|
+
.anim-fade-down{animation:kf-fade-down var(--anim-dur) var(--anim-ease) both}
|
|
182
|
+
.anim-fade-left{animation:kf-fade-left var(--anim-dur) var(--anim-ease) both}
|
|
183
|
+
.anim-fade-right{animation:kf-fade-right var(--anim-dur) var(--anim-ease) both}
|
|
184
|
+
|
|
185
|
+
/* ---------- RISE / DROP / ZOOM / BLUR / GLITCH ---------- */
|
|
186
|
+
@keyframes kf-rise{from{opacity:0;transform:translateY(60px) scale(.97);filter:blur(6px)}to{opacity:1;transform:none;filter:none}}
|
|
187
|
+
@keyframes kf-drop{from{opacity:0;transform:translateY(-60px) scale(.97)}to{opacity:1;transform:none}}
|
|
188
|
+
@keyframes kf-zoom{0%{opacity:0;transform:scale(.6)}60%{transform:scale(1.04)}100%{opacity:1;transform:scale(1)}}
|
|
189
|
+
@keyframes kf-blur{from{opacity:0;filter:blur(18px)}to{opacity:1;filter:none}}
|
|
190
|
+
@keyframes kf-glitch{0%{opacity:0;transform:translateX(0);clip-path:inset(0 0 0 0)}
|
|
191
|
+
20%{opacity:1;transform:translateX(-6px);clip-path:inset(20% 0 30% 0)}
|
|
192
|
+
40%{transform:translateX(4px);clip-path:inset(50% 0 10% 0)}
|
|
193
|
+
60%{transform:translateX(-3px);clip-path:inset(10% 0 60% 0)}
|
|
194
|
+
80%{transform:translateX(2px);clip-path:inset(0 0 0 0)}
|
|
195
|
+
100%{opacity:1;transform:none}}
|
|
196
|
+
.anim-rise-in{animation:kf-rise .9s var(--anim-ease) both}
|
|
197
|
+
.anim-drop-in{animation:kf-drop .8s var(--anim-ease) both}
|
|
198
|
+
.anim-zoom-pop{animation:kf-zoom .7s cubic-bezier(.22,1.3,.36,1) both}
|
|
199
|
+
.anim-blur-in{animation:kf-blur .8s var(--anim-ease) both}
|
|
200
|
+
.anim-glitch-in{animation:kf-glitch .8s steps(5,end) both}
|
|
201
|
+
|
|
202
|
+
/* ---------- TYPEWRITER ---------- */
|
|
203
|
+
.anim-typewriter{display:inline-block;overflow:hidden;white-space:nowrap;border-right:2px solid currentColor;
|
|
204
|
+
width:0;animation:kf-type 2.4s steps(40,end) forwards, kf-caret 1s step-end infinite}
|
|
205
|
+
@keyframes kf-type{to{width:100%}}
|
|
206
|
+
@keyframes kf-caret{50%{border-color:transparent}}
|
|
207
|
+
|
|
208
|
+
/* ---------- GLOW / SHIMMER / GRADIENT-FLOW ---------- */
|
|
209
|
+
@keyframes kf-neon{0%,100%{text-shadow:0 0 8px var(--accent),0 0 20px var(--accent)}
|
|
210
|
+
50%{text-shadow:0 0 16px var(--accent),0 0 40px var(--accent),0 0 80px var(--accent)}}
|
|
211
|
+
.anim-neon-glow{animation:kf-neon 2s ease-in-out infinite}
|
|
212
|
+
|
|
213
|
+
.anim-shimmer-sweep{position:relative;overflow:hidden}
|
|
214
|
+
.anim-shimmer-sweep::after{content:"";position:absolute;inset:0;
|
|
215
|
+
background:linear-gradient(110deg,transparent 40%,rgba(255,255,255,.55) 50%,transparent 60%);
|
|
216
|
+
transform:translateX(-100%);animation:kf-shimmer 2.4s var(--anim-ease) infinite}
|
|
217
|
+
@keyframes kf-shimmer{to{transform:translateX(100%)}}
|
|
218
|
+
|
|
219
|
+
.anim-gradient-flow{background:linear-gradient(90deg,var(--accent),var(--accent-2,var(--accent)),var(--accent-3,var(--accent)),var(--accent));
|
|
220
|
+
background-size:300% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;
|
|
221
|
+
animation:kf-gradflow 4s linear infinite}
|
|
222
|
+
@keyframes kf-gradflow{to{background-position:300% 0}}
|
|
223
|
+
|
|
224
|
+
/* ---------- STAGGER LIST ---------- */
|
|
225
|
+
.anim-stagger-list > *{opacity:0;animation:kf-rise .65s var(--anim-ease) both}
|
|
226
|
+
.anim-stagger-list > *:nth-child(1){animation-delay:.05s}
|
|
227
|
+
.anim-stagger-list > *:nth-child(2){animation-delay:.15s}
|
|
228
|
+
.anim-stagger-list > *:nth-child(3){animation-delay:.25s}
|
|
229
|
+
.anim-stagger-list > *:nth-child(4){animation-delay:.35s}
|
|
230
|
+
.anim-stagger-list > *:nth-child(5){animation-delay:.45s}
|
|
231
|
+
.anim-stagger-list > *:nth-child(6){animation-delay:.55s}
|
|
232
|
+
.anim-stagger-list > *:nth-child(7){animation-delay:.65s}
|
|
233
|
+
.anim-stagger-list > *:nth-child(8){animation-delay:.75s}
|
|
234
|
+
.anim-stagger-list > *:nth-child(n+9){animation-delay:.85s}
|
|
235
|
+
|
|
236
|
+
/* ---------- COUNTER-UP (JS-driven, marker class only) ---------- */
|
|
237
|
+
.counter{font-variant-numeric:tabular-nums}
|
|
238
|
+
|
|
239
|
+
/* ---------- SVG PATH DRAW ---------- */
|
|
240
|
+
.anim-path-draw path,.anim-path-draw line,.anim-path-draw polyline,.anim-path-draw circle,.anim-path-draw rect{
|
|
241
|
+
stroke-dasharray:1000;stroke-dashoffset:1000;animation:kf-draw 2s var(--anim-ease) forwards}
|
|
242
|
+
@keyframes kf-draw{to{stroke-dashoffset:0}}
|
|
243
|
+
|
|
244
|
+
/* ---------- PARALLAX TILT (hover) ---------- */
|
|
245
|
+
.anim-parallax-tilt{transform-style:preserve-3d;transition:transform .4s var(--anim-ease)}
|
|
246
|
+
.anim-parallax-tilt:hover{transform:perspective(900px) rotateX(6deg) rotateY(-8deg) translateZ(10px)}
|
|
247
|
+
|
|
248
|
+
/* ---------- CARD FLIP 3D ---------- */
|
|
249
|
+
@keyframes kf-flip{from{transform:perspective(1200px) rotateY(-90deg);opacity:0}
|
|
250
|
+
to{transform:perspective(1200px) rotateY(0);opacity:1}}
|
|
251
|
+
.anim-card-flip-3d{animation:kf-flip .9s var(--anim-ease) both;transform-style:preserve-3d;backface-visibility:hidden}
|
|
252
|
+
|
|
253
|
+
/* ---------- CUBE ROTATE 3D ---------- */
|
|
254
|
+
@keyframes kf-cube{from{transform:perspective(1200px) rotateX(20deg) rotateY(-90deg) translateZ(-200px);opacity:0}
|
|
255
|
+
to{transform:perspective(1200px) rotateX(0) rotateY(0) translateZ(0);opacity:1}}
|
|
256
|
+
.anim-cube-rotate-3d{animation:kf-cube 1s var(--anim-ease) both}
|
|
257
|
+
|
|
258
|
+
/* ---------- PAGE TURN 3D ---------- */
|
|
259
|
+
@keyframes kf-pageturn{from{transform:perspective(1600px) rotateY(-85deg);transform-origin:left center;opacity:0}
|
|
260
|
+
to{transform:perspective(1600px) rotateY(0);opacity:1}}
|
|
261
|
+
.anim-page-turn-3d{animation:kf-pageturn 1s var(--anim-ease) both;transform-origin:left center}
|
|
262
|
+
|
|
263
|
+
/* ---------- PERSPECTIVE ZOOM ---------- */
|
|
264
|
+
@keyframes kf-pzoom{from{opacity:0;transform:perspective(1400px) translateZ(-400px) rotateX(12deg)}
|
|
265
|
+
to{opacity:1;transform:none}}
|
|
266
|
+
.anim-perspective-zoom{animation:kf-pzoom 1s var(--anim-ease) both}
|
|
267
|
+
|
|
268
|
+
/* ---------- MARQUEE SCROLL ---------- */
|
|
269
|
+
.anim-marquee-scroll{display:flex;gap:48px;white-space:nowrap;animation:kf-marquee 20s linear infinite}
|
|
270
|
+
@keyframes kf-marquee{from{transform:translateX(0)}to{transform:translateX(-50%)}}
|
|
271
|
+
|
|
272
|
+
/* ---------- KEN BURNS ---------- */
|
|
273
|
+
@keyframes kf-kenburns{0%{transform:scale(1) translate(0,0)}100%{transform:scale(1.15) translate(-2%,-1%)}}
|
|
274
|
+
.anim-kenburns{animation:kf-kenburns 14s ease-in-out infinite alternate}
|
|
275
|
+
|
|
276
|
+
/* ---------- CONFETTI BURST (pseudo — pure CSS sparkles) ---------- */
|
|
277
|
+
.anim-confetti-burst{position:relative}
|
|
278
|
+
.anim-confetti-burst::before,.anim-confetti-burst::after{
|
|
279
|
+
content:"";position:absolute;top:50%;left:50%;width:8px;height:8px;border-radius:50%;
|
|
280
|
+
background:var(--accent);box-shadow:
|
|
281
|
+
20px -30px 0 var(--accent-2,var(--accent)),-25px -20px 0 var(--accent-3,var(--accent)),
|
|
282
|
+
30px 20px 0 var(--good,#1aaf6c),-30px 25px 0 var(--warn,#f5a524),
|
|
283
|
+
40px -10px 0 var(--bad,#e0445a),-45px 0 0 var(--accent),
|
|
284
|
+
10px 40px 0 var(--accent-2,var(--accent)),-15px -40px 0 var(--accent-3,var(--accent));
|
|
285
|
+
opacity:0;animation:kf-confetti 1.2s var(--anim-ease) forwards}
|
|
286
|
+
.anim-confetti-burst::after{animation-delay:.15s;transform:rotate(45deg)}
|
|
287
|
+
@keyframes kf-confetti{0%{opacity:0;transform:scale(.2)}30%{opacity:1}100%{opacity:0;transform:scale(2.2)}}
|
|
288
|
+
|
|
289
|
+
/* ---------- SPOTLIGHT ---------- */
|
|
290
|
+
@keyframes kf-spot{0%{clip-path:circle(0% at 50% 50%)}100%{clip-path:circle(140% at 50% 50%)}}
|
|
291
|
+
.anim-spotlight{animation:kf-spot 1.1s var(--anim-ease) both}
|
|
292
|
+
|
|
293
|
+
/* ---------- MORPH SHAPE (SVG) ---------- */
|
|
294
|
+
.anim-morph-shape path{animation:kf-morph 6s ease-in-out infinite alternate}
|
|
295
|
+
@keyframes kf-morph{0%{d:path("M60,120 Q120,20 180,120 T300,120")}
|
|
296
|
+
100%{d:path("M60,120 Q120,220 180,120 T300,120")}}
|
|
297
|
+
|
|
298
|
+
/* ---------- RIPPLE REVEAL ---------- */
|
|
299
|
+
@keyframes kf-ripple{0%{clip-path:circle(0% at 20% 80%);opacity:.4}
|
|
300
|
+
100%{clip-path:circle(160% at 20% 80%);opacity:1}}
|
|
301
|
+
.anim-ripple-reveal{animation:kf-ripple 1.2s var(--anim-ease) both}
|
|
302
|
+
|
|
303
|
+
/* reduced motion */
|
|
304
|
+
@media (prefers-reduced-motion: reduce){
|
|
305
|
+
[class*="anim-"]{animation:none!important;transition:none!important}
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
</style>
|
|
309
|
+
<style>/* course-module — academic but friendly */
|
|
310
|
+
.tpl-course-module{
|
|
311
|
+
--bg:#fbfaf6;--bg-soft:#f4f1e8;--surface:#ffffff;--surface-2:#f6f3ea;
|
|
312
|
+
--border:rgba(60,45,20,.12);--border-strong:rgba(60,45,20,.24);
|
|
313
|
+
--text-1:#2a2418;--text-2:#5a5140;--text-3:#8a7f68;
|
|
314
|
+
--accent:#2d7d6e;--accent-2:#d88a3a;--accent-3:#c4593f;
|
|
315
|
+
--grad:linear-gradient(135deg,#2d7d6e,#4ea893);
|
|
316
|
+
--radius:14px;--radius-lg:20px;
|
|
317
|
+
--shadow:0 12px 30px rgba(60,45,20,.07);
|
|
318
|
+
font-family:'Inter','Noto Sans SC',sans-serif;
|
|
319
|
+
}
|
|
320
|
+
.tpl-course-module .slide{padding:64px 80px;background:var(--bg);display:grid;grid-template-columns:260px 1fr;gap:56px;align-content:start}
|
|
321
|
+
.tpl-course-module .slide.full{grid-template-columns:1fr;display:flex;flex-direction:column;justify-content:center}
|
|
322
|
+
.tpl-course-module .sidebar{border-right:1px solid var(--border);padding-right:32px;position:relative}
|
|
323
|
+
.tpl-course-module .sidebar .brand{font-family:'Playfair Display',serif;font-size:22px;font-weight:700;color:var(--accent)}
|
|
324
|
+
.tpl-course-module .sidebar .brand::before{content:"✦ ";color:var(--accent-2)}
|
|
325
|
+
.tpl-course-module .sidebar h5{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.12em;color:var(--text-3);margin:32px 0 12px}
|
|
326
|
+
.tpl-course-module .obj-list{list-style:none;padding:0;margin:0;font-size:13px;color:var(--text-2);line-height:1.5}
|
|
327
|
+
.tpl-course-module .obj-list li{padding:8px 0 8px 22px;position:relative;border-bottom:1px dashed var(--border)}
|
|
328
|
+
.tpl-course-module .obj-list li::before{content:"○";position:absolute;left:0;top:8px;color:var(--accent)}
|
|
329
|
+
.tpl-course-module .obj-list li.done::before{content:"●";color:var(--accent)}
|
|
330
|
+
.tpl-course-module .obj-list li.current{color:var(--text-1);font-weight:700}
|
|
331
|
+
.tpl-course-module .obj-list li.current::before{content:"▸";color:var(--accent-2)}
|
|
332
|
+
.tpl-course-module .main{min-width:0}
|
|
333
|
+
.tpl-course-module .h1{font-family:'Playfair Display',serif;font-size:72px;line-height:1.02;font-weight:800;letter-spacing:-.02em;color:var(--text-1)}
|
|
334
|
+
.tpl-course-module .h2{font-family:'Playfair Display',serif;font-size:48px;line-height:1.1;font-weight:700;letter-spacing:-.015em;color:var(--text-1)}
|
|
335
|
+
.tpl-course-module h3,.tpl-course-module h4{color:var(--text-1)}
|
|
336
|
+
.tpl-course-module .kicker{color:var(--accent-2);font-size:12px;font-weight:700;letter-spacing:.14em}
|
|
337
|
+
.tpl-course-module .lede{font-size:20px;color:var(--text-2);line-height:1.7}
|
|
338
|
+
.tpl-course-module .callout{border-left:4px solid var(--accent-2);background:var(--surface-2);padding:20px 24px;border-radius:0 var(--radius) var(--radius) 0;margin-top:24px}
|
|
339
|
+
.tpl-course-module .callout b{color:var(--accent-2)}
|
|
340
|
+
.tpl-course-module .concept-box{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px 26px;box-shadow:var(--shadow)}
|
|
341
|
+
.tpl-course-module .concept-box h4{margin-top:0;color:var(--accent)}
|
|
342
|
+
.tpl-course-module .exercise{background:#fff8ed;border:1.5px dashed var(--accent-2);border-radius:var(--radius);padding:24px 28px}
|
|
343
|
+
.tpl-course-module .exercise::before{content:"✎ Exercise";display:block;font-size:12px;font-weight:700;letter-spacing:.12em;color:var(--accent-2);margin-bottom:10px;text-transform:uppercase}
|
|
344
|
+
.tpl-course-module .code{background:#2a2418;color:#f4f1e8;border-radius:var(--radius);padding:20px 24px;font-family:'JetBrains Mono',monospace;font-size:14px;line-height:1.7;overflow:auto}
|
|
345
|
+
.tpl-course-module .code .cmt{color:#8a7f68;font-style:italic}
|
|
346
|
+
.tpl-course-module .code .kw{color:#e8a770}
|
|
347
|
+
.tpl-course-module .code .str{color:#8ec6b2}
|
|
348
|
+
.tpl-course-module .mcq{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:18px 22px;margin-bottom:10px;display:flex;gap:14px;align-items:flex-start;cursor:pointer}
|
|
349
|
+
.tpl-course-module .mcq .letter{flex:none;width:28px;height:28px;border-radius:50%;border:2px solid var(--text-3);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px;color:var(--text-2)}
|
|
350
|
+
.tpl-course-module .mcq.correct{border-color:var(--accent);background:rgba(45,125,110,.06)}
|
|
351
|
+
.tpl-course-module .mcq.correct .letter{border-color:var(--accent);background:var(--accent);color:#fff}
|
|
352
|
+
.tpl-course-module .pill-academic{display:inline-block;padding:4px 12px;border-radius:4px;background:var(--surface-2);border:1px solid var(--border);font-size:12px;color:var(--text-2);font-family:'JetBrains Mono',monospace}
|
|
353
|
+
.tpl-course-module .slide.full .h1{font-size:88px}
|
|
354
|
+
.tpl-course-module .deck-footer{color:var(--text-3)}
|
|
355
|
+
|
|
356
|
+
</style>
|
|
357
|
+
<style>
|
|
358
|
+
/* Static-preview fallback (runtime.js is absent — keep every slide visible) */
|
|
359
|
+
.deck{height:auto;min-height:100vh;overflow:visible}
|
|
360
|
+
.slide{position:relative;inset:auto;opacity:1;pointer-events:auto;transform:none;height:100vh;page-break-after:always}
|
|
361
|
+
.deck-header,.deck-footer,.slide-number,.progress-bar,.notes-overlay,.overview{pointer-events:none}
|
|
362
|
+
.notes{display:none!important}
|
|
363
|
+
</style></head>
|
|
364
|
+
<body class="tpl-course-module">
|
|
365
|
+
<div class="deck">
|
|
366
|
+
|
|
367
|
+
<!-- 1. Cover -->
|
|
368
|
+
<section class="slide full" data-title="Cover">
|
|
369
|
+
<p class="kicker">CS 101 · MODULE 04</p>
|
|
370
|
+
<h1 class="h1 mt-s">Recursion: solving<br>problems by <em>calling yourself</em>.</h1>
|
|
371
|
+
<p class="lede mt-l" style="max-width:62ch">In this module you'll learn why a function that calls itself is not a trick, but the most natural way to describe problems that contain smaller copies of themselves.</p>
|
|
372
|
+
<div class="row mt-l" style="gap:16px">
|
|
373
|
+
<span class="pill-academic">~ 45 min read</span>
|
|
374
|
+
<span class="pill-academic">prereq · functions, if/else</span>
|
|
375
|
+
<span class="pill-academic">lang · Python</span>
|
|
376
|
+
</div>
|
|
377
|
+
<div class="deck-footer"><span>Dr. A. Rivera · Spring 2026</span><span class="slide-number" data-current="1" data-total="7"></span></div>
|
|
378
|
+
</section>
|
|
379
|
+
|
|
380
|
+
<!-- 2. Objectives -->
|
|
381
|
+
<section class="slide" data-title="Objectives">
|
|
382
|
+
<aside class="sidebar">
|
|
383
|
+
<div class="brand">CS 101 · M04</div>
|
|
384
|
+
<h5>Learning objectives</h5>
|
|
385
|
+
<ul class="obj-list">
|
|
386
|
+
<li class="current">Define recursion</li>
|
|
387
|
+
<li>Identify a base case</li>
|
|
388
|
+
<li>Trace a recursive call</li>
|
|
389
|
+
<li>Convert loop ↔ recursion</li>
|
|
390
|
+
<li>Recognize when recursion helps</li>
|
|
391
|
+
</ul>
|
|
392
|
+
<h5>Module progress</h5>
|
|
393
|
+
<p class="dim" style="font-size:13px">Page 2 of 7 · ~5 min in</p>
|
|
394
|
+
</aside>
|
|
395
|
+
<div class="main">
|
|
396
|
+
<p class="kicker">OBJECTIVES</p>
|
|
397
|
+
<h2 class="h2 mt-s">By the end, you will be able to…</h2>
|
|
398
|
+
<div class="stack mt-l">
|
|
399
|
+
<div class="concept-box"><h4>① Explain recursion in one sentence.</h4><p class="dim">"A function that solves a problem by calling itself on a smaller version of that problem."</p></div>
|
|
400
|
+
<div class="concept-box"><h4>② Write a base case that always terminates.</h4><p class="dim">Every recursive function must have an exit door, or it runs forever.</p></div>
|
|
401
|
+
<div class="concept-box"><h4>③ Trace a call stack on paper.</h4><p class="dim">Given <code>fact(4)</code>, draw the stack frames top-to-bottom.</p></div>
|
|
402
|
+
<div class="concept-box"><h4>④ Convert a while-loop to a recursive equivalent.</h4><p class="dim">And explain when one is clearer than the other.</p></div>
|
|
403
|
+
</div>
|
|
404
|
+
</div>
|
|
405
|
+
</section>
|
|
406
|
+
|
|
407
|
+
<!-- 3. Concept -->
|
|
408
|
+
<section class="slide" data-title="Concept">
|
|
409
|
+
<aside class="sidebar">
|
|
410
|
+
<div class="brand">CS 101 · M04</div>
|
|
411
|
+
<h5>Learning objectives</h5>
|
|
412
|
+
<ul class="obj-list">
|
|
413
|
+
<li class="done">Define recursion</li>
|
|
414
|
+
<li class="current">Identify a base case</li>
|
|
415
|
+
<li>Trace a recursive call</li>
|
|
416
|
+
<li>Convert loop ↔ recursion</li>
|
|
417
|
+
<li>Recognize when recursion helps</li>
|
|
418
|
+
</ul>
|
|
419
|
+
<h5>Key terms</h5>
|
|
420
|
+
<p class="dim" style="font-size:13px">base case · recursive case · call stack · tail call</p>
|
|
421
|
+
</aside>
|
|
422
|
+
<div class="main">
|
|
423
|
+
<p class="kicker">CORE CONCEPT</p>
|
|
424
|
+
<h2 class="h2 mt-s">Two parts, always.</h2>
|
|
425
|
+
<p class="lede mt-m">A recursive function has exactly two things inside it: a <b>base case</b> (when to stop) and a <b>recursive case</b> (how to shrink the problem before calling yourself).</p>
|
|
426
|
+
<div class="callout">
|
|
427
|
+
<b>Rule of thumb.</b> If you can't name the base case out loud, don't write the recursion yet. Draw it on paper first.
|
|
428
|
+
</div>
|
|
429
|
+
<div class="grid g2 mt-l">
|
|
430
|
+
<div class="concept-box"><h4>Base case</h4><p class="dim">The smallest possible input — one the function answers directly, without calling itself.</p><p class="pill-academic">e.g. <b>n == 0</b></p></div>
|
|
431
|
+
<div class="concept-box"><h4>Recursive case</h4><p class="dim">Every other input — delegate to a smaller version of the same problem.</p><p class="pill-academic">e.g. <b>n × fact(n-1)</b></p></div>
|
|
432
|
+
</div>
|
|
433
|
+
</div>
|
|
434
|
+
</section>
|
|
435
|
+
|
|
436
|
+
<!-- 4. Example -->
|
|
437
|
+
<section class="slide" data-title="Example">
|
|
438
|
+
<aside class="sidebar">
|
|
439
|
+
<div class="brand">CS 101 · M04</div>
|
|
440
|
+
<h5>Learning objectives</h5>
|
|
441
|
+
<ul class="obj-list">
|
|
442
|
+
<li class="done">Define recursion</li>
|
|
443
|
+
<li class="done">Identify a base case</li>
|
|
444
|
+
<li class="current">Trace a recursive call</li>
|
|
445
|
+
<li>Convert loop ↔ recursion</li>
|
|
446
|
+
<li>Recognize when recursion helps</li>
|
|
447
|
+
</ul>
|
|
448
|
+
<h5>Try it yourself</h5>
|
|
449
|
+
<p class="dim" style="font-size:13px">Open repl.it and run the code on the right. Then try <code>fact(10)</code>.</p>
|
|
450
|
+
</aside>
|
|
451
|
+
<div class="main">
|
|
452
|
+
<p class="kicker">WORKED EXAMPLE</p>
|
|
453
|
+
<h2 class="h2 mt-s">Factorial, 7 lines.</h2>
|
|
454
|
+
<div class="code mt-m"><pre style="margin:0"><span class="cmt"># fact(n) = n × (n-1) × … × 1, and fact(0) = 1</span>
|
|
455
|
+
<span class="kw">def</span> fact(n):
|
|
456
|
+
<span class="kw">if</span> n == <span class="str">0</span>: <span class="cmt"># base case</span>
|
|
457
|
+
<span class="kw">return</span> <span class="str">1</span>
|
|
458
|
+
<span class="kw">return</span> n * fact(n - <span class="str">1</span>) <span class="cmt"># recursive case</span>
|
|
459
|
+
|
|
460
|
+
<span class="kw">print</span>(fact(<span class="str">4</span>)) <span class="cmt"># → 24</span></pre></div>
|
|
461
|
+
<div class="callout">
|
|
462
|
+
<b>Trace fact(4).</b> 4 × fact(3) → 4 × (3 × fact(2)) → 4 × 3 × (2 × fact(1)) → 4 × 3 × 2 × 1 × fact(0) → 4 × 3 × 2 × 1 × 1 = <b>24</b>.
|
|
463
|
+
</div>
|
|
464
|
+
</div>
|
|
465
|
+
</section>
|
|
466
|
+
|
|
467
|
+
<!-- 5. Exercise -->
|
|
468
|
+
<section class="slide" data-title="Exercise">
|
|
469
|
+
<aside class="sidebar">
|
|
470
|
+
<div class="brand">CS 101 · M04</div>
|
|
471
|
+
<h5>Learning objectives</h5>
|
|
472
|
+
<ul class="obj-list">
|
|
473
|
+
<li class="done">Define recursion</li>
|
|
474
|
+
<li class="done">Identify a base case</li>
|
|
475
|
+
<li class="done">Trace a recursive call</li>
|
|
476
|
+
<li class="current">Convert loop ↔ recursion</li>
|
|
477
|
+
<li>Recognize when recursion helps</li>
|
|
478
|
+
</ul>
|
|
479
|
+
<h5>Time</h5>
|
|
480
|
+
<p class="dim" style="font-size:13px">~10 minutes · solo</p>
|
|
481
|
+
</aside>
|
|
482
|
+
<div class="main">
|
|
483
|
+
<p class="kicker">EXERCISE 4.1</p>
|
|
484
|
+
<h2 class="h2 mt-s">Write <em>sum_to(n)</em>.</h2>
|
|
485
|
+
<p class="lede mt-m">Return <code>1 + 2 + … + n</code> using recursion — no loops allowed.</p>
|
|
486
|
+
<div class="exercise mt-l">
|
|
487
|
+
<p style="margin:0;font-size:18px;color:var(--text-1)"><b>Your task</b></p>
|
|
488
|
+
<ol style="color:var(--text-2);line-height:1.8;margin:10px 0 0">
|
|
489
|
+
<li>Write the base case. What does <code>sum_to(0)</code> return?</li>
|
|
490
|
+
<li>Write the recursive case in terms of <code>sum_to(n - 1)</code>.</li>
|
|
491
|
+
<li>Test it: <code>sum_to(5) == 15</code>, <code>sum_to(10) == 55</code>.</li>
|
|
492
|
+
<li>Bonus: what happens if you call <code>sum_to(-3)</code>? Fix it.</li>
|
|
493
|
+
</ol>
|
|
494
|
+
</div>
|
|
495
|
+
<p class="dim mt-m" style="font-size:14px">Stuck? Remember: a base case is the smallest input you already know the answer to.</p>
|
|
496
|
+
</div>
|
|
497
|
+
</section>
|
|
498
|
+
|
|
499
|
+
<!-- 6. Check understanding -->
|
|
500
|
+
<section class="slide" data-title="Check">
|
|
501
|
+
<aside class="sidebar">
|
|
502
|
+
<div class="brand">CS 101 · M04</div>
|
|
503
|
+
<h5>Learning objectives</h5>
|
|
504
|
+
<ul class="obj-list">
|
|
505
|
+
<li class="done">Define recursion</li>
|
|
506
|
+
<li class="done">Identify a base case</li>
|
|
507
|
+
<li class="done">Trace a recursive call</li>
|
|
508
|
+
<li class="done">Convert loop ↔ recursion</li>
|
|
509
|
+
<li class="current">Recognize when recursion helps</li>
|
|
510
|
+
</ul>
|
|
511
|
+
<h5>Self-assess</h5>
|
|
512
|
+
<p class="dim" style="font-size:13px">You should get 3/3.</p>
|
|
513
|
+
</aside>
|
|
514
|
+
<div class="main">
|
|
515
|
+
<p class="kicker">CHECK YOUR UNDERSTANDING</p>
|
|
516
|
+
<h2 class="h2 mt-s">Which function will recurse forever?</h2>
|
|
517
|
+
<div class="mt-l">
|
|
518
|
+
<div class="mcq"><div class="letter">A</div><div><b>def f(n): return 1 if n == 0 else n * f(n - 1)</b><p class="dim" style="font-size:13px;margin:4px 0 0">Base case <code>n == 0</code>, shrinks toward it. Terminates.</p></div></div>
|
|
519
|
+
<div class="mcq correct"><div class="letter">B</div><div><b>def f(n): return n + f(n + 1)</b><p class="dim" style="font-size:13px;margin:4px 0 0"><b style="color:var(--accent)">✓ Correct.</b> No base case, and <code>n</code> grows — infinite recursion.</p></div></div>
|
|
520
|
+
<div class="mcq"><div class="letter">C</div><div><b>def f(n): return n if n < 2 else f(n - 1) + f(n - 2)</b><p class="dim" style="font-size:13px;margin:4px 0 0">Classic Fibonacci. Base case on <code>n < 2</code>. Terminates.</p></div></div>
|
|
521
|
+
</div>
|
|
522
|
+
</div>
|
|
523
|
+
</section>
|
|
524
|
+
|
|
525
|
+
<!-- 7. Summary -->
|
|
526
|
+
<section class="slide full" data-title="Summary">
|
|
527
|
+
<p class="kicker">SUMMARY · MODULE 04</p>
|
|
528
|
+
<h1 class="h1 mt-s">You can now…</h1>
|
|
529
|
+
<div class="grid g2 mt-l">
|
|
530
|
+
<div class="concept-box"><h4>✓ Define recursion</h4><p class="dim">A function that calls itself on a smaller input.</p></div>
|
|
531
|
+
<div class="concept-box"><h4>✓ Write a safe base case</h4><p class="dim">Every recursion needs an exit door.</p></div>
|
|
532
|
+
<div class="concept-box"><h4>✓ Trace a call stack</h4><p class="dim">You can unwind <code>fact(4)</code> by hand.</p></div>
|
|
533
|
+
<div class="concept-box"><h4>✓ Judge when to use it</h4><p class="dim">Trees and self-similar problems → recursion. Flat iteration → loop.</p></div>
|
|
534
|
+
</div>
|
|
535
|
+
<div class="callout mt-l">
|
|
536
|
+
<b>Up next · Module 05.</b> Divide & conquer: merge sort. We'll use everything you just learned — but on lists, not numbers.
|
|
537
|
+
</div>
|
|
538
|
+
</section>
|
|
539
|
+
|
|
540
|
+
</div>
|
|
541
|
+
|
|
542
|
+
</body></html>
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: html-ppt-dir-key-nav-minimal
|
|
3
|
+
description: 8 页极简方向键 keynote — 每页一个独立单色背景(靛 / 奶 / 绛 / 翠 / 灰 / 紫 / 白 / 炭),各自配色,160px display 标题 + 4px 短粗 accent 线分隔、箭头 → 前缀的 Mono 列表、左下 ← → kbd 提示 + 右下页码、巨大呼吸留白。适合"有话要说但没什么可看"的 keynote、launch、公开演讲。
|
|
4
|
+
triggers:
|
|
5
|
+
- "minimal keynote"
|
|
6
|
+
- "极简"
|
|
7
|
+
- "mono color"
|
|
8
|
+
- "one idea per slide"
|
|
9
|
+
- "public talk"
|
|
10
|
+
- "launch keynote"
|
|
11
|
+
od:
|
|
12
|
+
mode: deck
|
|
13
|
+
scenario: personal
|
|
14
|
+
upstream: "https://github.com/lewislulu/html-ppt-skill"
|
|
15
|
+
preview:
|
|
16
|
+
type: html
|
|
17
|
+
entry: index.html
|
|
18
|
+
design_system:
|
|
19
|
+
requires: false
|
|
20
|
+
speaker_notes: true
|
|
21
|
+
animations: true
|
|
22
|
+
example_prompt: "用 html-ppt-dir-key-nav-minimal 模板做一份 8 页极简 keynote。每页一个单色背景 + 一句 160px 大标题 + 几条箭头列表。先告诉我演讲主题,然后帮我把 8 个核心观点拍成 8 页(每页一个 idea)。"
|
|
23
|
+
---
|
|
24
|
+
# HTML PPT · 8 色极简方向键
|
|
25
|
+
|
|
26
|
+
A focused entry point into the [`html-ppt`](../html-ppt/SKILL.md) master skill that lands the user directly on the **`dir-key-nav-minimal`** full-deck template.
|
|
27
|
+
|
|
28
|
+
## When this card is picked
|
|
29
|
+
|
|
30
|
+
The Examples gallery wires "Use this prompt" to the example_prompt above. When you accept that prompt, this card is the right pick if the user wants exactly the visual identity of `dir-key-nav-minimal` (see the upstream [full-decks catalog](../html-ppt/references/full-decks.md) for screenshots and rationale).
|
|
31
|
+
|
|
32
|
+
## How to author the deck
|
|
33
|
+
|
|
34
|
+
1. **Read the master skill first.** All authoring rules live in
|
|
35
|
+
[`skills/html-ppt/SKILL.md`](../html-ppt/SKILL.md) — content/audience checklist,
|
|
36
|
+
token rules, layout reuse, presenter mode, the keyboard runtime, and the
|
|
37
|
+
"never put presenter-only text on the slide" rule.
|
|
38
|
+
2. **Start from the matching template folder:**
|
|
39
|
+
`skills/html-ppt/templates/full-decks/dir-key-nav-minimal/` — copy `index.html` and
|
|
40
|
+
`style.css` into the project, keep the `.tpl-dir-key-nav-minimal` body class.
|
|
41
|
+
3. **Bring the shared runtime with the template.** The upstream
|
|
42
|
+
`index.html` links the shared CSS/JS via `../../../assets/...` because it
|
|
43
|
+
sits three folders deep inside `skills/html-ppt/templates/full-decks/`.
|
|
44
|
+
Once you copy `index.html` into the project, those parent-relative URLs
|
|
45
|
+
no longer resolve and `base.css`, `animations.css`, and `runtime.js`
|
|
46
|
+
will 404 — meaning the deck never activates and slide navigation is
|
|
47
|
+
dead. Pick one of these two recipes per project:
|
|
48
|
+
- **Recipe A — copy + rewrite (preferred):** copy
|
|
49
|
+
`skills/html-ppt/assets/fonts.css`, `skills/html-ppt/assets/base.css`,
|
|
50
|
+
`skills/html-ppt/assets/animations/animations.css`, and
|
|
51
|
+
`skills/html-ppt/assets/runtime.js` into a project-local
|
|
52
|
+
`assets/` (with `assets/animations/animations.css`), then rewrite the
|
|
53
|
+
four `<link>`/`<script>` tags in `index.html` from
|
|
54
|
+
`../../../assets/...` to the matching project-local paths
|
|
55
|
+
(`assets/fonts.css`, `assets/base.css`,
|
|
56
|
+
`assets/animations/animations.css`, `assets/runtime.js`).
|
|
57
|
+
- **Recipe B — inline:** read the same four files and replace each
|
|
58
|
+
`<link rel="stylesheet" href="../../../assets/...">` with a
|
|
59
|
+
`<style>...</style>` containing the file's contents, and the
|
|
60
|
+
`<script src="../../../assets/runtime.js">` with a
|
|
61
|
+
`<script>...</script>` containing `runtime.js`. Yields a single
|
|
62
|
+
self-contained `index.html`.
|
|
63
|
+
Either way, do not ship the upstream `../../../assets/...` URLs
|
|
64
|
+
verbatim into a project artifact — they only work in-tree.
|
|
65
|
+
4. **Pick a theme.** Default tokens look fine; if the user wants a different
|
|
66
|
+
feel, swap in any of the 36 themes from `skills/html-ppt/assets/themes/*.css`
|
|
67
|
+
via `<link id="theme-link">` and let `T` cycle.
|
|
68
|
+
5. **Replace demo content, not classes.** The `.tpl-dir-key-nav-minimal` scoped CSS only
|
|
69
|
+
recognises the structural classes shipped in the template — keep them.
|
|
70
|
+
6. **Speaker notes go inside `<aside class="notes">` or `<div class="notes">`** — never as visible text on the slide.
|
|
71
|
+
|
|
72
|
+
## Attribution
|
|
73
|
+
|
|
74
|
+
Visual system, layouts, themes and the runtime keyboard model come from
|
|
75
|
+
the upstream MIT-licensed [`lewislulu/html-ppt-skill`](https://github.com/lewislulu/html-ppt-skill). The
|
|
76
|
+
LICENSE file ships at `skills/html-ppt/LICENSE`; please keep it in place when
|
|
77
|
+
redistributing.
|