stella-coder 3.9.1 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.mcp.json +11 -0
- package/.opencode/skills/banner-design/SKILL.md +196 -0
- package/.opencode/skills/banner-design/references/banner-sizes-and-styles.md +118 -0
- package/.opencode/skills/brand/SKILL.md +97 -0
- package/.opencode/skills/brand/references/approval-checklist.md +169 -0
- package/.opencode/skills/brand/references/asset-organization.md +157 -0
- package/.opencode/skills/brand/references/brand-guideline-template.md +140 -0
- package/.opencode/skills/brand/references/color-palette-management.md +186 -0
- package/.opencode/skills/brand/references/consistency-checklist.md +94 -0
- package/.opencode/skills/brand/references/logo-usage-rules.md +185 -0
- package/.opencode/skills/brand/references/messaging-framework.md +85 -0
- package/.opencode/skills/brand/references/typography-specifications.md +214 -0
- package/.opencode/skills/brand/references/update.md +118 -0
- package/.opencode/skills/brand/references/visual-identity.md +96 -0
- package/.opencode/skills/brand/references/voice-framework.md +88 -0
- package/.opencode/skills/brand/scripts/extract-colors.cjs +341 -0
- package/.opencode/skills/brand/scripts/inject-brand-context.cjs +349 -0
- package/.opencode/skills/brand/scripts/sync-brand-to-tokens.cjs +248 -0
- package/.opencode/skills/brand/scripts/tests/test_sync_brand_to_tokens.py +52 -0
- package/.opencode/skills/brand/scripts/validate-asset.cjs +387 -0
- package/.opencode/skills/brand/templates/brand-guidelines-starter.md +275 -0
- package/.opencode/skills/design/SKILL.md +313 -0
- package/.opencode/skills/design/data/cip/deliverables.csv +51 -0
- package/.opencode/skills/design/data/cip/industries.csv +21 -0
- package/.opencode/skills/design/data/cip/mockup-contexts.csv +21 -0
- package/.opencode/skills/design/data/cip/styles.csv +21 -0
- package/.opencode/skills/design/data/icon/styles.csv +16 -0
- package/.opencode/skills/design/data/logo/colors.csv +56 -0
- package/.opencode/skills/design/data/logo/industries.csv +56 -0
- package/.opencode/skills/design/data/logo/styles.csv +56 -0
- package/.opencode/skills/design/references/banner-sizes-and-styles.md +118 -0
- package/.opencode/skills/design/references/cip-deliverable-guide.md +95 -0
- package/.opencode/skills/design/references/cip-design.md +121 -0
- package/.opencode/skills/design/references/cip-prompt-engineering.md +84 -0
- package/.opencode/skills/design/references/cip-style-guide.md +68 -0
- package/.opencode/skills/design/references/design-routing.md +207 -0
- package/.opencode/skills/design/references/icon-design.md +122 -0
- package/.opencode/skills/design/references/logo-color-psychology.md +101 -0
- package/.opencode/skills/design/references/logo-design.md +92 -0
- package/.opencode/skills/design/references/logo-prompt-engineering.md +158 -0
- package/.opencode/skills/design/references/logo-style-guide.md +109 -0
- package/.opencode/skills/design/references/slides-copywriting-formulas.md +84 -0
- package/.opencode/skills/design/references/slides-create.md +4 -0
- package/.opencode/skills/design/references/slides-html-template.md +295 -0
- package/.opencode/skills/design/references/slides-layout-patterns.md +137 -0
- package/.opencode/skills/design/references/slides-strategies.md +94 -0
- package/.opencode/skills/design/references/slides.md +42 -0
- package/.opencode/skills/design/references/social-photos-design.md +329 -0
- package/.opencode/skills/design/scripts/cip/core.py +215 -0
- package/.opencode/skills/design/scripts/cip/generate.py +484 -0
- package/.opencode/skills/design/scripts/cip/render-html.py +424 -0
- package/.opencode/skills/design/scripts/cip/search.py +127 -0
- package/.opencode/skills/design/scripts/icon/generate.py +487 -0
- package/.opencode/skills/design/scripts/logo/core.py +175 -0
- package/.opencode/skills/design/scripts/logo/generate.py +362 -0
- package/.opencode/skills/design/scripts/logo/search.py +114 -0
- package/.opencode/skills/design-system/SKILL.md +244 -0
- package/.opencode/skills/design-system/data/slide-backgrounds.csv +11 -0
- package/.opencode/skills/design-system/data/slide-charts.csv +26 -0
- package/.opencode/skills/design-system/data/slide-color-logic.csv +14 -0
- package/.opencode/skills/design-system/data/slide-copy.csv +26 -0
- package/.opencode/skills/design-system/data/slide-layout-logic.csv +16 -0
- package/.opencode/skills/design-system/data/slide-layouts.csv +26 -0
- package/.opencode/skills/design-system/data/slide-strategies.csv +16 -0
- package/.opencode/skills/design-system/data/slide-typography.csv +15 -0
- package/.opencode/skills/design-system/references/component-specs.md +236 -0
- package/.opencode/skills/design-system/references/component-tokens.md +214 -0
- package/.opencode/skills/design-system/references/primitive-tokens.md +203 -0
- package/.opencode/skills/design-system/references/semantic-tokens.md +215 -0
- package/.opencode/skills/design-system/references/states-and-variants.md +241 -0
- package/.opencode/skills/design-system/references/tailwind-integration.md +251 -0
- package/.opencode/skills/design-system/references/token-architecture.md +224 -0
- package/.opencode/skills/design-system/scripts/embed-tokens.cjs +99 -0
- package/.opencode/skills/design-system/scripts/fetch-background.py +317 -0
- package/.opencode/skills/design-system/scripts/generate-slide.py +770 -0
- package/.opencode/skills/design-system/scripts/generate-tokens.cjs +205 -0
- package/.opencode/skills/design-system/scripts/html-token-validator.py +327 -0
- package/.opencode/skills/design-system/scripts/search-slides.py +218 -0
- package/.opencode/skills/design-system/scripts/slide-token-validator.py +35 -0
- package/.opencode/skills/design-system/scripts/slide_search_core.py +453 -0
- package/.opencode/skills/design-system/scripts/tests/test_validate_tokens.py +48 -0
- package/.opencode/skills/design-system/scripts/validate-tokens.cjs +246 -0
- package/.opencode/skills/design-system/templates/design-tokens-starter.json +143 -0
- package/.opencode/skills/slides/SKILL.md +40 -0
- package/.opencode/skills/slides/references/copywriting-formulas.md +84 -0
- package/.opencode/skills/slides/references/create.md +4 -0
- package/.opencode/skills/slides/references/html-template.md +295 -0
- package/.opencode/skills/slides/references/layout-patterns.md +137 -0
- package/.opencode/skills/slides/references/slide-strategies.md +94 -0
- package/.opencode/skills/ui-styling/LICENSE.txt +202 -0
- package/.opencode/skills/ui-styling/SKILL.md +324 -0
- package/.opencode/skills/ui-styling/references/canvas-design-system.md +320 -0
- package/.opencode/skills/ui-styling/references/shadcn-accessibility.md +471 -0
- package/.opencode/skills/ui-styling/references/shadcn-components.md +424 -0
- package/.opencode/skills/ui-styling/references/shadcn-theming.md +373 -0
- package/.opencode/skills/ui-styling/references/tailwind-customization.md +483 -0
- package/.opencode/skills/ui-styling/references/tailwind-responsive.md +382 -0
- package/.opencode/skills/ui-styling/references/tailwind-utilities.md +455 -0
- package/.opencode/skills/ui-styling/scripts/requirements.txt +17 -0
- package/.opencode/skills/ui-styling/scripts/shadcn_add.py +308 -0
- package/.opencode/skills/ui-styling/scripts/tailwind_config_gen.py +473 -0
- package/.opencode/skills/ui-styling/scripts/tests/coverage-ui.json +1 -0
- package/.opencode/skills/ui-styling/scripts/tests/requirements.txt +3 -0
- package/.opencode/skills/ui-styling/scripts/tests/test_shadcn_add.py +266 -0
- package/.opencode/skills/ui-styling/scripts/tests/test_tailwind_config_gen.py +394 -0
- package/.opencode/skills/ui-ux-pro-max/SKILL.md +396 -0
- package/.opencode/skills/ui-ux-pro-max/data/_sync_all.py +414 -0
- package/.opencode/skills/ui-ux-pro-max/data/app-interface.csv +31 -0
- package/.opencode/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/.opencode/skills/ui-ux-pro-max/data/colors.csv +193 -0
- package/.opencode/skills/ui-ux-pro-max/data/design.csv +1776 -0
- package/.opencode/skills/ui-ux-pro-max/data/draft.csv +1779 -0
- package/.opencode/skills/ui-ux-pro-max/data/google-fonts.csv +1924 -0
- package/.opencode/skills/ui-ux-pro-max/data/icons.csv +106 -0
- package/.opencode/skills/ui-ux-pro-max/data/landing.csv +35 -0
- package/.opencode/skills/ui-ux-pro-max/data/motion.csv +17 -0
- package/.opencode/skills/ui-ux-pro-max/data/products.csv +193 -0
- package/.opencode/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/angular.csv +51 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/avalonia.csv +57 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/javafx.csv +76 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/laravel.csv +51 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +71 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/threejs.csv +54 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/uno.csv +60 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/uwp.csv +56 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/winui.csv +60 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/wpf.csv +57 -0
- package/.opencode/skills/ui-ux-pro-max/data/styles.csv +85 -0
- package/.opencode/skills/ui-ux-pro-max/data/typography.csv +75 -0
- package/.opencode/skills/ui-ux-pro-max/data/ui-reasoning.csv +162 -0
- package/.opencode/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/.opencode/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-312.pyc +0 -0
- package/.opencode/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-312.pyc +0 -0
- package/.opencode/skills/ui-ux-pro-max/scripts/core.py +274 -0
- package/.opencode/skills/ui-ux-pro-max/scripts/design_system.py +1329 -0
- package/.opencode/skills/ui-ux-pro-max/scripts/search.py +127 -0
- package/README.md +5 -0
- package/STELLA.md +1 -1
- package/dist/antimalware/database.mjs +871 -0
- package/dist/antimalware/index.mjs +8 -0
- package/dist/antimalware/scanner.mjs +591 -0
- package/dist/antimalware/ui.mjs +570 -0
- package/dist/banner.mjs +46 -0
- package/dist/index.mjs +3073 -0
- package/dist/markdown.mjs +100 -0
- package/dist/sea-config.json +4 -0
- package/dist/security.mjs +237 -0
- package/dist/theme.mjs +89 -0
- package/dist/tools.mjs +3145 -0
- package/install-stella.bat +44 -0
- package/package.json +12 -3
- package/presentation-advanced-features-demo/README.md +27 -0
- package/presentation-advanced-features-demo/index.html +371 -0
- package/presentation-advanced-features-demo/print.html +81 -0
- package/presentation-advanced-features-demo/slide-01.html +98 -0
- package/presentation-advanced-features-demo/slide-02.html +101 -0
- package/presentation-advanced-features-demo/slide-03.html +100 -0
- package/presentation-advanced-features-demo/slide-04.html +100 -0
- package/presentation-advanced-features-demo/slide-05.html +100 -0
- package/presentation-advanced-features-demo/slide-06.html +64 -0
- package/presentation-advanced-features-demo/slide-07.html +101 -0
- package/presentation-advanced-features-demo/slide-08.html +91 -0
- package/presentation-stella-coder---ai-coding-agent/README.md +27 -0
- package/presentation-stella-coder---ai-coding-agent/index.html +168 -0
- package/presentation-stella-coder---ai-coding-agent/slide-01.html +98 -0
- package/presentation-stella-coder---ai-coding-agent/slide-02.html +101 -0
- package/presentation-stella-coder---ai-coding-agent/slide-03.html +100 -0
- package/presentation-stella-coder---ai-coding-agent/slide-04.html +100 -0
- package/presentation-stella-coder---ai-coding-agent/slide-05.html +100 -0
- package/presentation-stella-coder---ai-coding-agent/slide-06.html +100 -0
- package/presentation-stella-coder---ai-coding-agent/slide-07.html +100 -0
- package/presentation-stella-coder---ai-coding-agent/slide-08.html +64 -0
- package/presentation-stella-coder---ai-coding-agent/slide-09.html +101 -0
- package/presentation-stella-coder---ai-coding-agent/slide-10.html +91 -0
- package/presentation-stella-coder-demo/README.md +27 -0
- package/presentation-stella-coder-demo/index.html +371 -0
- package/presentation-stella-coder-demo/slide-01.html +98 -0
- package/presentation-stella-coder-demo/slide-02.html +101 -0
- package/presentation-stella-coder-demo/slide-03.html +100 -0
- package/presentation-stella-coder-demo/slide-04.html +100 -0
- package/presentation-stella-coder-demo/slide-05.html +100 -0
- package/presentation-stella-coder-demo/slide-06.html +64 -0
- package/presentation-stella-coder-demo/slide-07.html +101 -0
- package/presentation-stella-coder-demo/slide-08.html +91 -0
- package/presentation-stella-coder-features/README.md +27 -0
- package/presentation-stella-coder-features/index.html +364 -0
- package/presentation-stella-coder-features/print.html +77 -0
- package/presentation-stella-coder-features/slide-01.html +98 -0
- package/presentation-stella-coder-features/slide-02.html +101 -0
- package/presentation-stella-coder-features/slide-03.html +100 -0
- package/presentation-stella-coder-features/slide-04.html +100 -0
- package/presentation-stella-coder-features/slide-05.html +64 -0
- package/presentation-stella-coder-features/slide-06.html +101 -0
- package/presentation-stella-coder-features/slide-07.html +91 -0
- package/presentation-test-presentation/README.md +27 -0
- package/presentation-test-presentation/index.html +350 -0
- package/presentation-test-presentation/print.html +69 -0
- package/presentation-test-presentation/slide-01.html +98 -0
- package/presentation-test-presentation/slide-02.html +101 -0
- package/presentation-test-presentation/slide-03.html +64 -0
- package/presentation-test-presentation/slide-04.html +101 -0
- package/presentation-test-presentation/slide-05.html +91 -0
- package/presentation-/321/202/320/265/321/201/321/202/320/276/320/262/320/260/321/217-/320/277/321/200/320/265/320/267/320/265/320/275/321/202/320/260/321/206/320/270/321/217/README.md +27 -0
- package/presentation-/321/202/320/265/321/201/321/202/320/276/320/262/320/260/321/217-/320/277/321/200/320/265/320/267/320/265/320/275/321/202/320/260/321/206/320/270/321/217/index.html +159 -0
- package/presentation-/321/202/320/265/321/201/321/202/320/276/320/262/320/260/321/217-/320/277/321/200/320/265/320/267/320/265/320/275/321/202/320/260/321/206/320/270/321/217/slide-01.html +98 -0
- package/presentation-/321/202/320/265/321/201/321/202/320/276/320/262/320/260/321/217-/320/277/321/200/320/265/320/267/320/265/320/275/321/202/320/260/321/206/320/270/321/217/slide-02.html +101 -0
- package/presentation-/321/202/320/265/321/201/321/202/320/276/320/262/320/260/321/217-/320/277/321/200/320/265/320/267/320/265/320/275/321/202/320/260/321/206/320/270/321/217/slide-03.html +100 -0
- package/presentation-/321/202/320/265/321/201/321/202/320/276/320/262/320/260/321/217-/320/277/321/200/320/265/320/267/320/265/320/275/321/202/320/260/321/206/320/270/321/217/slide-04.html +100 -0
- package/presentation-/321/202/320/265/321/201/321/202/320/276/320/262/320/260/321/217-/320/277/321/200/320/265/320/267/320/265/320/275/321/202/320/260/321/206/320/270/321/217/slide-05.html +64 -0
- package/presentation-/321/202/320/265/321/201/321/202/320/276/320/262/320/260/321/217-/320/277/321/200/320/265/320/267/320/265/320/275/321/202/320/260/321/206/320/270/321/217/slide-06.html +101 -0
- package/presentation-/321/202/320/265/321/201/321/202/320/276/320/262/320/260/321/217-/320/277/321/200/320/265/320/267/320/265/320/275/321/202/320/260/321/206/320/270/321/217/slide-07.html +91 -0
- package/stella-cli/coding-brain.mjs +753 -0
- package/stella-cli/index.mjs +931 -15
- package/stella-cli/mcp.mjs +296 -0
- package/stella-cli/presentations.mjs +1106 -0
- package/stella-cli/subagents.mjs +142 -0
- package/stella-cli/telegram-bot.mjs +824 -0
- package/stella-cli/tg-bg.bat +13 -0
- package/stella-cli/tg-server.bat +15 -0
- package/stella-cli/tg-server.mjs +116 -0
- package/stella-cli/theme.mjs +6 -4
- package/stella-coder-3.9.2.tgz +0 -0
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
# HTML Slide Template
|
|
2
|
+
|
|
3
|
+
Complete HTML structure with navigation, tokens, and Chart.js integration.
|
|
4
|
+
|
|
5
|
+
## Base Structure
|
|
6
|
+
|
|
7
|
+
```html
|
|
8
|
+
<!DOCTYPE html>
|
|
9
|
+
<html lang="en">
|
|
10
|
+
<head>
|
|
11
|
+
<meta charset="UTF-8">
|
|
12
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
13
|
+
<title>Presentation Title</title>
|
|
14
|
+
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js"></script>
|
|
15
|
+
<style>
|
|
16
|
+
/* Paste embed-tokens.cjs output here */
|
|
17
|
+
:root {
|
|
18
|
+
--color-primary: #FF6B6B;
|
|
19
|
+
--color-background: #0D0D0D;
|
|
20
|
+
/* ... more tokens */
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/* Base slide styles */
|
|
24
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
25
|
+
body {
|
|
26
|
+
background: var(--color-background);
|
|
27
|
+
color: #fff;
|
|
28
|
+
font-family: var(--typography-font-body, 'Inter', sans-serif);
|
|
29
|
+
overflow: hidden;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* 16:9 Aspect Ratio Container (desktop) */
|
|
33
|
+
.slide-deck {
|
|
34
|
+
position: relative;
|
|
35
|
+
width: 100vw;
|
|
36
|
+
height: 100vh;
|
|
37
|
+
overflow: hidden;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@media (min-width: 769px) {
|
|
41
|
+
.slide-deck {
|
|
42
|
+
/* Lock to 16:9 — letterbox if viewport ratio differs */
|
|
43
|
+
max-width: calc(100vh * 16 / 9);
|
|
44
|
+
max-height: calc(100vw * 9 / 16);
|
|
45
|
+
margin: auto;
|
|
46
|
+
position: absolute;
|
|
47
|
+
inset: 0;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.slide {
|
|
52
|
+
position: absolute;
|
|
53
|
+
width: 100%; height: 100%;
|
|
54
|
+
display: flex;
|
|
55
|
+
flex-direction: column;
|
|
56
|
+
justify-content: center;
|
|
57
|
+
align-items: center;
|
|
58
|
+
text-align: center;
|
|
59
|
+
padding: 60px;
|
|
60
|
+
opacity: 0;
|
|
61
|
+
visibility: hidden;
|
|
62
|
+
transition: opacity 0.4s;
|
|
63
|
+
background: var(--color-background);
|
|
64
|
+
overflow: hidden; /* Prevent content overflow */
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.slide.active { opacity: 1; visibility: visible; }
|
|
68
|
+
|
|
69
|
+
/* Slide inner wrapper — constrains content within safe area */
|
|
70
|
+
.slide-content {
|
|
71
|
+
width: 100%;
|
|
72
|
+
max-width: 100%;
|
|
73
|
+
max-height: 100%;
|
|
74
|
+
overflow: hidden;
|
|
75
|
+
display: flex;
|
|
76
|
+
flex-direction: column;
|
|
77
|
+
justify-content: center;
|
|
78
|
+
align-items: center;
|
|
79
|
+
gap: 16px;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/* Typography */
|
|
83
|
+
h1, h2 { font-family: var(--typography-font-heading, 'Space Grotesk', sans-serif); }
|
|
84
|
+
.slide-title {
|
|
85
|
+
font-size: clamp(32px, 6vw, 80px);
|
|
86
|
+
background: var(--primitive-gradient-primary, linear-gradient(135deg, #FF6B6B, #FF8E53));
|
|
87
|
+
-webkit-background-clip: text;
|
|
88
|
+
-webkit-text-fill-color: transparent;
|
|
89
|
+
line-height: 1.1;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/* ===== RESPONSIVE BREAKPOINTS ===== */
|
|
93
|
+
|
|
94
|
+
/* Tablet (portrait) */
|
|
95
|
+
@media (max-width: 768px) {
|
|
96
|
+
.slide { padding: 32px 24px; }
|
|
97
|
+
.slide-title { font-size: clamp(28px, 5vw, 48px); }
|
|
98
|
+
h2 { font-size: clamp(20px, 4vw, 32px); }
|
|
99
|
+
p, li { font-size: clamp(14px, 2.5vw, 18px); }
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/* Mobile */
|
|
103
|
+
@media (max-width: 480px) {
|
|
104
|
+
.slide { padding: 24px 16px; }
|
|
105
|
+
.slide-title { font-size: clamp(22px, 6vw, 36px); }
|
|
106
|
+
h2 { font-size: clamp(18px, 4.5vw, 28px); }
|
|
107
|
+
p, li { font-size: clamp(12px, 3vw, 16px); }
|
|
108
|
+
.nav-controls { bottom: 16px; gap: 12px; }
|
|
109
|
+
.nav-btn { width: 32px; height: 32px; font-size: 14px; }
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* Navigation */
|
|
113
|
+
.progress-bar {
|
|
114
|
+
position: fixed;
|
|
115
|
+
top: 0; left: 0;
|
|
116
|
+
height: 3px;
|
|
117
|
+
background: var(--color-primary);
|
|
118
|
+
transition: width 0.3s;
|
|
119
|
+
z-index: 1000;
|
|
120
|
+
}
|
|
121
|
+
.nav-controls {
|
|
122
|
+
position: fixed;
|
|
123
|
+
bottom: 30px;
|
|
124
|
+
left: 50%;
|
|
125
|
+
transform: translateX(-50%);
|
|
126
|
+
display: flex;
|
|
127
|
+
align-items: center;
|
|
128
|
+
gap: 20px;
|
|
129
|
+
z-index: 1000;
|
|
130
|
+
}
|
|
131
|
+
.nav-btn {
|
|
132
|
+
background: rgba(255,255,255,0.1);
|
|
133
|
+
border: none;
|
|
134
|
+
color: #fff;
|
|
135
|
+
width: 40px; height: 40px;
|
|
136
|
+
border-radius: 50%;
|
|
137
|
+
cursor: pointer;
|
|
138
|
+
font-size: 18px;
|
|
139
|
+
}
|
|
140
|
+
.nav-btn:hover { background: rgba(255,255,255,0.2); }
|
|
141
|
+
.slide-counter { color: rgba(255,255,255,0.6); font-size: 14px; }
|
|
142
|
+
</style>
|
|
143
|
+
</head>
|
|
144
|
+
<body>
|
|
145
|
+
<!-- Progress Bar -->
|
|
146
|
+
<div class="progress-bar" id="progressBar"></div>
|
|
147
|
+
|
|
148
|
+
<!-- Slide Deck Container (16:9 on desktop) -->
|
|
149
|
+
<div class="slide-deck">
|
|
150
|
+
|
|
151
|
+
<!-- Slides -->
|
|
152
|
+
<div class="slide active">
|
|
153
|
+
<div class="slide-content">
|
|
154
|
+
<h1 class="slide-title">Title Slide</h1>
|
|
155
|
+
<p>Subtitle or tagline</p>
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
|
|
159
|
+
<!-- More slides... (always wrap content in .slide-content) -->
|
|
160
|
+
|
|
161
|
+
</div><!-- /.slide-deck -->
|
|
162
|
+
|
|
163
|
+
<!-- Navigation -->
|
|
164
|
+
<div class="nav-controls">
|
|
165
|
+
<button class="nav-btn" onclick="prevSlide()">←</button>
|
|
166
|
+
<span class="slide-counter"><span id="current">1</span> / <span id="total">9</span></span>
|
|
167
|
+
<button class="nav-btn" onclick="nextSlide()">→</button>
|
|
168
|
+
</div>
|
|
169
|
+
|
|
170
|
+
<script>
|
|
171
|
+
let current = 1;
|
|
172
|
+
const total = document.querySelectorAll('.slide').length;
|
|
173
|
+
document.getElementById('total').textContent = total;
|
|
174
|
+
|
|
175
|
+
function showSlide(n) {
|
|
176
|
+
if (n < 1) n = 1;
|
|
177
|
+
if (n > total) n = total;
|
|
178
|
+
current = n;
|
|
179
|
+
document.querySelectorAll('.slide').forEach((s, i) => {
|
|
180
|
+
s.classList.toggle('active', i === n - 1);
|
|
181
|
+
});
|
|
182
|
+
document.getElementById('current').textContent = n;
|
|
183
|
+
document.getElementById('progressBar').style.width = (n / total * 100) + '%';
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
function nextSlide() { showSlide(current + 1); }
|
|
187
|
+
function prevSlide() { showSlide(current - 1); }
|
|
188
|
+
|
|
189
|
+
document.addEventListener('keydown', (e) => {
|
|
190
|
+
if (e.key === 'ArrowRight' || e.key === ' ') { e.preventDefault(); nextSlide(); }
|
|
191
|
+
if (e.key === 'ArrowLeft') { e.preventDefault(); prevSlide(); }
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
document.addEventListener('click', (e) => {
|
|
195
|
+
if (!e.target.closest('.nav-controls')) nextSlide();
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
showSlide(1);
|
|
199
|
+
</script>
|
|
200
|
+
</body>
|
|
201
|
+
</html>
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
## Chart.js Integration
|
|
205
|
+
|
|
206
|
+
```html
|
|
207
|
+
<div class="chart-container" style="width: min(80%, 600px); height: clamp(200px, 40vh, 350px);">
|
|
208
|
+
<canvas id="revenueChart"></canvas>
|
|
209
|
+
</div>
|
|
210
|
+
|
|
211
|
+
<script>
|
|
212
|
+
new Chart(document.getElementById('revenueChart'), {
|
|
213
|
+
type: 'line', // or 'bar', 'doughnut', 'radar'
|
|
214
|
+
data: {
|
|
215
|
+
labels: ['Sep', 'Oct', 'Nov', 'Dec'],
|
|
216
|
+
datasets: [{
|
|
217
|
+
label: 'MRR ($K)',
|
|
218
|
+
data: [5, 12, 28, 45],
|
|
219
|
+
borderColor: '#FF6B6B',
|
|
220
|
+
backgroundColor: 'rgba(255, 107, 107, 0.1)',
|
|
221
|
+
borderWidth: 3,
|
|
222
|
+
fill: true,
|
|
223
|
+
tension: 0.4
|
|
224
|
+
}]
|
|
225
|
+
},
|
|
226
|
+
options: {
|
|
227
|
+
responsive: true,
|
|
228
|
+
maintainAspectRatio: false,
|
|
229
|
+
plugins: { legend: { display: false } },
|
|
230
|
+
scales: {
|
|
231
|
+
x: { grid: { color: 'rgba(255,255,255,0.05)' }, ticks: { color: '#B8B8D0' } },
|
|
232
|
+
y: { grid: { color: 'rgba(255,255,255,0.05)' }, ticks: { color: '#B8B8D0' } }
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
</script>
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
## Animation Classes
|
|
240
|
+
|
|
241
|
+
```css
|
|
242
|
+
/* Fade Up */
|
|
243
|
+
.animate-fade-up {
|
|
244
|
+
animation: fadeUp 0.6s ease-out forwards;
|
|
245
|
+
opacity: 0;
|
|
246
|
+
}
|
|
247
|
+
@keyframes fadeUp {
|
|
248
|
+
from { opacity: 0; transform: translateY(30px); }
|
|
249
|
+
to { opacity: 1; transform: translateY(0); }
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/* Count Animation */
|
|
253
|
+
.animate-count { animation: countUp 1s ease-out forwards; }
|
|
254
|
+
|
|
255
|
+
/* Scale */
|
|
256
|
+
.animate-scale {
|
|
257
|
+
animation: scaleIn 0.5s ease-out forwards;
|
|
258
|
+
}
|
|
259
|
+
@keyframes scaleIn {
|
|
260
|
+
from { opacity: 0; transform: scale(0.9); }
|
|
261
|
+
to { opacity: 1; transform: scale(1); }
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/* Stagger Children */
|
|
265
|
+
.animate-stagger > * {
|
|
266
|
+
opacity: 0;
|
|
267
|
+
animation: fadeUp 0.5s ease-out forwards;
|
|
268
|
+
}
|
|
269
|
+
.animate-stagger > *:nth-child(1) { animation-delay: 0.1s; }
|
|
270
|
+
.animate-stagger > *:nth-child(2) { animation-delay: 0.2s; }
|
|
271
|
+
.animate-stagger > *:nth-child(3) { animation-delay: 0.3s; }
|
|
272
|
+
.animate-stagger > *:nth-child(4) { animation-delay: 0.4s; }
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
## Background Images
|
|
276
|
+
|
|
277
|
+
```html
|
|
278
|
+
<div class="slide slide-with-bg" style="background-image: url('https://images.pexels.com/...')">
|
|
279
|
+
<div class="overlay" style="background: linear-gradient(135deg, rgba(13,13,13,0.9), rgba(13,13,13,0.7))"></div>
|
|
280
|
+
<div class="content" style="position: relative; z-index: 1;">
|
|
281
|
+
<!-- Slide content -->
|
|
282
|
+
</div>
|
|
283
|
+
</div>
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
## CSS Variables Reference
|
|
287
|
+
|
|
288
|
+
| Variable | Usage |
|
|
289
|
+
|----------|-------|
|
|
290
|
+
| `--color-primary` | Brand primary (CTA, highlights) |
|
|
291
|
+
| `--color-background` | Slide background |
|
|
292
|
+
| `--color-secondary` | Secondary elements |
|
|
293
|
+
| `--primitive-gradient-primary` | Title gradients |
|
|
294
|
+
| `--typography-font-heading` | Headlines |
|
|
295
|
+
| `--typography-font-body` | Body text |
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Layout Patterns
|
|
2
|
+
|
|
3
|
+
25 slide layouts with CSS structures and animation classes.
|
|
4
|
+
|
|
5
|
+
## Layout Selection by Use Case
|
|
6
|
+
|
|
7
|
+
| Layout | Use Case | Animation |
|
|
8
|
+
|--------|----------|-----------|
|
|
9
|
+
| Title Slide | Opening/first impression | `animate-fade-up` |
|
|
10
|
+
| Problem Statement | Establish pain point | `animate-stagger` |
|
|
11
|
+
| Solution Overview | Introduce solution | `animate-scale` |
|
|
12
|
+
| Feature Grid | Show capabilities (3-6 cards) | `animate-stagger` |
|
|
13
|
+
| Metrics Dashboard | Display KPIs (3-4 metrics) | `animate-stagger-scale` |
|
|
14
|
+
| Comparison Table | Compare options | `animate-fade-up` |
|
|
15
|
+
| Timeline Flow | Show progression | `animate-stagger` |
|
|
16
|
+
| Team Grid | Introduce people | `animate-stagger` |
|
|
17
|
+
| Quote Testimonial | Customer endorsement | `animate-fade-up` |
|
|
18
|
+
| Two Column Split | Compare/contrast | `animate-fade-up` |
|
|
19
|
+
| Big Number Hero | Single powerful metric | `animate-count` |
|
|
20
|
+
| Product Screenshot | Show product UI | `animate-scale` |
|
|
21
|
+
| Pricing Cards | Present tiers | `animate-stagger` |
|
|
22
|
+
| CTA Closing | Drive action | `animate-pulse` |
|
|
23
|
+
|
|
24
|
+
## CSS Structures
|
|
25
|
+
|
|
26
|
+
### Title Slide
|
|
27
|
+
```css
|
|
28
|
+
.slide-title {
|
|
29
|
+
display: flex;
|
|
30
|
+
flex-direction: column;
|
|
31
|
+
justify-content: center;
|
|
32
|
+
align-items: center;
|
|
33
|
+
text-align: center;
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Two Column Split
|
|
38
|
+
```css
|
|
39
|
+
.slide-split {
|
|
40
|
+
display: grid;
|
|
41
|
+
grid-template-columns: 1fr 1fr;
|
|
42
|
+
gap: 48px;
|
|
43
|
+
align-items: center;
|
|
44
|
+
}
|
|
45
|
+
@media (max-width: 768px) {
|
|
46
|
+
.slide-split { grid-template-columns: 1fr; gap: 24px; }
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Feature Grid (3 columns)
|
|
51
|
+
```css
|
|
52
|
+
.slide-features {
|
|
53
|
+
display: grid;
|
|
54
|
+
grid-template-columns: repeat(3, 1fr);
|
|
55
|
+
gap: 24px;
|
|
56
|
+
}
|
|
57
|
+
@media (max-width: 768px) {
|
|
58
|
+
.slide-features { grid-template-columns: repeat(2, 1fr); gap: 16px; }
|
|
59
|
+
}
|
|
60
|
+
@media (max-width: 480px) {
|
|
61
|
+
.slide-features { grid-template-columns: 1fr; }
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Metrics Dashboard (4 columns)
|
|
66
|
+
```css
|
|
67
|
+
.slide-metrics {
|
|
68
|
+
display: grid;
|
|
69
|
+
grid-template-columns: repeat(4, 1fr);
|
|
70
|
+
gap: 16px;
|
|
71
|
+
}
|
|
72
|
+
@media (max-width: 768px) {
|
|
73
|
+
.slide-metrics { grid-template-columns: repeat(2, 1fr); }
|
|
74
|
+
}
|
|
75
|
+
@media (max-width: 480px) {
|
|
76
|
+
.slide-metrics { grid-template-columns: 1fr; }
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Component Variants
|
|
81
|
+
|
|
82
|
+
### Card Styles
|
|
83
|
+
| Style | CSS Class | Use For |
|
|
84
|
+
|-------|-----------|---------|
|
|
85
|
+
| Icon Left | `.card-icon-left` | Features with icons |
|
|
86
|
+
| Accent Bar | `.card-accent-bar` | Highlighted features |
|
|
87
|
+
| Metric Card | `.card-metric` | Numbers/stats |
|
|
88
|
+
| Avatar Card | `.card-avatar` | Team members |
|
|
89
|
+
| Pricing Card | `.card-pricing` | Price tiers |
|
|
90
|
+
|
|
91
|
+
### Metric Styles
|
|
92
|
+
| Style | Effect |
|
|
93
|
+
|-------|--------|
|
|
94
|
+
| `gradient-number` | Gradient text on numbers |
|
|
95
|
+
| `oversized` | Extra large (120px+) |
|
|
96
|
+
| `sparkline` | Small inline chart |
|
|
97
|
+
| `funnel-numbers` | Conversion stages |
|
|
98
|
+
|
|
99
|
+
## Visual Treatments
|
|
100
|
+
|
|
101
|
+
| Treatment | When to Use |
|
|
102
|
+
|-----------|-------------|
|
|
103
|
+
| `gradient-glow` | Title slides, CTAs |
|
|
104
|
+
| `subtle-border` | Problem statements |
|
|
105
|
+
| `icon-top` | Feature grids |
|
|
106
|
+
| `screenshot-shadow` | Product screenshots |
|
|
107
|
+
| `popular-highlight` | Pricing (scale 1.05) |
|
|
108
|
+
| `bg-overlay` | Background images |
|
|
109
|
+
| `contrast-pair` | Before/after |
|
|
110
|
+
| `logo-grayscale` | Client logos |
|
|
111
|
+
|
|
112
|
+
## Search Commands
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
# Find layout for specific use
|
|
116
|
+
python .claude/skills/design-system/scripts/search-slides.py "metrics dashboard" -d layout
|
|
117
|
+
|
|
118
|
+
# Contextual recommendation
|
|
119
|
+
python .claude/skills/design-system/scripts/search-slides.py "traction slide" \
|
|
120
|
+
--context --position 4 --total 10
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Layout Decision Flow
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
1. What's the slide goal?
|
|
127
|
+
└─> Search layout-logic.csv
|
|
128
|
+
|
|
129
|
+
2. What emotion should it trigger?
|
|
130
|
+
└─> Search color-logic.csv
|
|
131
|
+
|
|
132
|
+
3. What's the content type?
|
|
133
|
+
└─> Search typography.csv
|
|
134
|
+
|
|
135
|
+
4. Should it break pattern?
|
|
136
|
+
└─> Check position (1/3, 2/3) → Use full-bleed
|
|
137
|
+
```
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Slide Strategies
|
|
2
|
+
|
|
3
|
+
15 proven deck structures with emotion arcs.
|
|
4
|
+
|
|
5
|
+
## Strategy Selection
|
|
6
|
+
|
|
7
|
+
| Strategy | Slides | Goal | Audience |
|
|
8
|
+
|----------|--------|------|----------|
|
|
9
|
+
| YC Seed Deck | 10-12 | Raise seed funding | VCs |
|
|
10
|
+
| Guy Kawasaki | 10 | Pitch in 20 min | Investors |
|
|
11
|
+
| Series A | 12-15 | Raise Series A | Growth VCs |
|
|
12
|
+
| Product Demo | 5-8 | Demonstrate value | Prospects |
|
|
13
|
+
| Sales Pitch | 7-10 | Close deal | Qualified leads |
|
|
14
|
+
| Nancy Duarte Sparkline | Varies | Transform perspective | Any |
|
|
15
|
+
| Problem-Solution-Benefit | 3-5 | Quick persuasion | Time-pressed |
|
|
16
|
+
| QBR | 10-15 | Update stakeholders | Leadership |
|
|
17
|
+
| Team All-Hands | 8-12 | Align team | Employees |
|
|
18
|
+
| Conference Talk | 15-25 | Thought leadership | Attendees |
|
|
19
|
+
| Workshop | 20-40 | Teach skills | Learners |
|
|
20
|
+
| Case Study | 8-12 | Prove value | Prospects |
|
|
21
|
+
| Competitive Analysis | 6-10 | Strategic decisions | Internal |
|
|
22
|
+
| Board Meeting | 15-20 | Update board | Directors |
|
|
23
|
+
| Webinar | 20-30 | Generate leads | Registrants |
|
|
24
|
+
|
|
25
|
+
## Common Structures
|
|
26
|
+
|
|
27
|
+
### YC Seed Deck (10 slides)
|
|
28
|
+
1. Title/Hook
|
|
29
|
+
2. Problem
|
|
30
|
+
3. Solution
|
|
31
|
+
4. Traction
|
|
32
|
+
5. Market
|
|
33
|
+
6. Product
|
|
34
|
+
7. Business Model
|
|
35
|
+
8. Team
|
|
36
|
+
9. Financials
|
|
37
|
+
10. The Ask
|
|
38
|
+
|
|
39
|
+
**Emotion arc:** curiosity→frustration→hope→confidence→trust→urgency
|
|
40
|
+
|
|
41
|
+
### Sales Pitch (9 slides)
|
|
42
|
+
1. Personalized Hook
|
|
43
|
+
2. Their Problem
|
|
44
|
+
3. Cost of Inaction
|
|
45
|
+
4. Your Solution
|
|
46
|
+
5. Proof/Case Studies
|
|
47
|
+
6. Differentiators
|
|
48
|
+
7. Pricing/ROI
|
|
49
|
+
8. Objection Handling
|
|
50
|
+
9. CTA + Next Steps
|
|
51
|
+
|
|
52
|
+
**Emotion arc:** connection→frustration→fear→hope→trust→confidence→urgency
|
|
53
|
+
|
|
54
|
+
### Product Demo (6 slides)
|
|
55
|
+
1. Hook/Problem
|
|
56
|
+
2. Solution Overview
|
|
57
|
+
3. Live Demo/Screenshots
|
|
58
|
+
4. Key Features
|
|
59
|
+
5. Benefits/Pricing
|
|
60
|
+
6. CTA
|
|
61
|
+
|
|
62
|
+
**Emotion arc:** curiosity→frustration→hope→confidence→urgency
|
|
63
|
+
|
|
64
|
+
## Duarte Sparkline Pattern
|
|
65
|
+
|
|
66
|
+
Alternate between "What Is" (current pain) and "What Could Be" (better future):
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
What Is → What Could Be → What Is → What Could Be → New Bliss
|
|
70
|
+
(pain) (hope) (pain) (hope) (resolution)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Pattern breaks at 1/3 and 2/3 positions create engagement peaks.
|
|
74
|
+
|
|
75
|
+
## Search Commands
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
# Find strategy by goal
|
|
79
|
+
python .claude/skills/design-system/scripts/search-slides.py "investor pitch" -d strategy
|
|
80
|
+
|
|
81
|
+
# Get emotion arc
|
|
82
|
+
python .claude/skills/design-system/scripts/search-slides.py "series a funding" -d strategy --json
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Matching Strategy to Context
|
|
86
|
+
|
|
87
|
+
| Context | Recommended Strategy |
|
|
88
|
+
|---------|---------------------|
|
|
89
|
+
| Raising money | YC Seed, Series A, Guy Kawasaki |
|
|
90
|
+
| Selling product | Sales Pitch, Product Demo |
|
|
91
|
+
| Internal update | QBR, All-Hands, Board Meeting |
|
|
92
|
+
| Public speaking | Conference Talk, Workshop |
|
|
93
|
+
| Proving value | Case Study, Competitive Analysis |
|
|
94
|
+
| Lead generation | Webinar |
|